gpt4 book ai didi

c++ - 关于使用 boost::variant 重新加载运算符的编译错误

转载 作者:行者123 更新时间:2023-11-30 02:03:02 32 4
gpt4 key购买 nike

我正在尝试学习 boost.variant。但是,我从书上复制的代码编译不过:

class var_print : public boost::static_visitor<void>    
{
public:
template<typename T>
void operator()(T &i) {
i *= 2;
cout<<i<<endl;
}
};

这是我尝试使用它的方式。

    typedef boost::variant<int,double,string> var_t;
var_t v(1); //v->int
boost::apply_visitor(var_print(),v);

编译器生成以下错误:

错误:“i *= 2”中的“operator*=”不匹配

这让我很困惑,因为模板函数无论何时被调用都会确定参数的类型,而 int 应该定义运算符 *=。

最佳答案

您需要为 std::string& 单独设置一个 operator(),因为没有为 std 定义运算符 *=::字符串

此外,您的运算符必须标记为 const,因为您要将临时访问者实例传递给 apply_visitor

关于c++ - 关于使用 boost::variant 重新加载运算符的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565553/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com