Если все типы в моем boost::variant
поддерживают один и тот же метод, есть ли способ вызвать его в общем (т.е. не вызывать его отдельно для каждого метода? из static_visitor
)?
Я пытаюсь заставить что-то вроде этого работать:
class A
{
void boo() {}
};
class B
{
void boo() {}
};
class C
{
void boo() {}
};
typedef boost::variant<A, B, C> X;
void foo(X& d)
{
x.boo();
}
но он не компилируется, говоря 'boo' : не является членом 'boost::variant
.
В настоящее время у меня есть несколько классов, все они наследуются от интерфейса, поэтому их единственный общий метод можно использовать полиморфно. Я также хочу иметь возможность использовать классы через посетителя, поскольку все остальные методы уникальны для каждого конкретного класса. Я надеялся, что boost::variant
может быть лучшей альтернативой реализации моего собственного механизма посетителей здесь. Это?