为什么下面的提升变体访问者代码不起作用
why the below boost variant visitor code doesnt work
我有一个结构 A:
struct A
{
//some implementation
}
我的增强变体是:
boost::variant<double, A> v1 = 1.0;
boost::variant<double, A> v2 = 2.0;
我的访问仿函数定义为:
class SomeWork:
public boost::static_visitor<int>
{
public:
int operator()(const A& data1, const A& data2) const
{
//some work
return 1;
}
int operator()(const double& data1, const double& data2) const
{
//some work
return 2;
}
};
int main()
{
boost::variant<double, A> v1 = 1.0;
boost::variant<double, A> v2 = 2.0;
boost::apply_visitor(SomeWork(), v1 ,v2);
return 0;
};
当我执行上述操作时,我收到一条错误消息:
error C2664: 'int SomeWork::operator ()(const A&, const A&) const': cannot convert argument 2 from 'T' to 'const double &'
不确定为什么会这样。
我用的boost版本是107200
提前致谢。
boost::apply_visitor
需要考虑您的 variant
实例拥有的所有可能的类型组合。这意味着 SomeWork
缺少以下组合:
int operator()(const A& data1, const double& data2) const
{
//some work
return 3;
}
int operator()(const double& data1, const A& data2) const
{
//some work
return 4;
}
添加这些后,我就可以编译你的代码了。
我有一个结构 A:
struct A
{
//some implementation
}
我的增强变体是:
boost::variant<double, A> v1 = 1.0;
boost::variant<double, A> v2 = 2.0;
我的访问仿函数定义为:
class SomeWork:
public boost::static_visitor<int>
{
public:
int operator()(const A& data1, const A& data2) const
{
//some work
return 1;
}
int operator()(const double& data1, const double& data2) const
{
//some work
return 2;
}
};
int main()
{
boost::variant<double, A> v1 = 1.0;
boost::variant<double, A> v2 = 2.0;
boost::apply_visitor(SomeWork(), v1 ,v2);
return 0;
};
当我执行上述操作时,我收到一条错误消息:
error C2664: 'int SomeWork::operator ()(const A&, const A&) const': cannot convert argument 2 from 'T' to 'const double &'
不确定为什么会这样。
我用的boost版本是107200
提前致谢。
boost::apply_visitor
需要考虑您的 variant
实例拥有的所有可能的类型组合。这意味着 SomeWork
缺少以下组合:
int operator()(const A& data1, const double& data2) const
{
//some work
return 3;
}
int operator()(const double& data1, const A& data2) const
{
//some work
return 4;
}
添加这些后,我就可以编译你的代码了。