0

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

提前致谢。

4

1 回答 1

3

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;
    }

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

于 2022-02-23T16:31:43.923 回答