Я хочу создать фабрику посетителей, которая возвращает объект любого из этих типов:
class Visitor1: public boost::static_visitor<int>
{
public:
int operator()(int& ) const
{
return 1;
}
int operator()(bool& ) const
{
return 1;
}
};
class Visitor2: public boost::static_visitor<int>
{
public:
int operator()(int& ) const
{
return 2;
}
int operator()(bool& ) const
{
return 2;
}
};
Я предположил, что могу вернуть указатель типа boost::static_visitor* на объект, созданный фабрикой, но это не компилируется. Я также не могу иметь ссылку на объект, как показано ниже:
Visitor1 v;
Type t;
boost::static_visitor<int>& vR = v;
boost::apply_visitor(vR, t);
Ошибка, которую я получаю:
see reference to function template instantiation 'int boost::apply_visitor<boost::static_visitor<R>,Type>(Visitor &,Visitable &)' being compiled
1> with
1> [
1> R=int,
1> Visitor=boost::static_visitor<int>,
1> Visitable=Type
1> ]
1>c:\boost_1_49_0\boost\variant\variant.hpp(858): error C2064: term does not evaluate to a function taking 1 arguments
Как мне реализовать мою фабрику?