Вызов методов, общих для типов в boost::variant

Если все типы в моем 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может быть лучшей альтернативой реализации моего собственного механизма посетителей здесь. Это?

6
задан thehouse 20 June 2012 в 00:19
поделиться