【发布时间】:2012-11-19 13:48:38
【问题描述】:
我希望创建一个访问者工厂,它返回以下任一类型的对象:
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
我应该如何实现我的工厂?
【问题讨论】: