为什么下面的boost变体访问者代码不起作用



我有一个结构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 &'

不确定为什么会发生这种情况。

我使用的增强版本是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;
}

添加这些代码时,我可以编译您的代码。

最新更新