typedef boost::variant<int, double> Type;
class Append: public boost::static_visitor<>
{
public:
void operator()(int)
{}
void operator()(double)
{}
};
Type type(1.2);
Visitor visitor;
boost::apply_visitor(visitor, type);
是否可以更改访问者,使其接收如下额外数据:
class Append: public boost::static_visitor<>
{
public:
void operator()(int, const std::string&)
{}
void operator()(double, const std::string&)
{}
};
此字符串值在 Append 对象的生命周期内发生变化。在这种情况下,通过构造函数传递字符串不是一个选项。
最佳答案
每次调用的“附加参数”是 this
指针。使用它来传递您需要的任何其他信息:
#include <boost/variant.hpp>
typedef boost::variant<int, double> Type;
class Append: public boost::static_visitor<>
{
public:
void operator()(int)
{}
void operator()(double)
{}
std::string argument;
};
int main() {
Type type(1.2);
Append visitor;
visitor.argument = "first value";
boost::apply_visitor(visitor, type);
visitor.argument = "new value";
boost::apply_visitor(visitor, type);
}
关于c++ - 具有多个参数的 boost::static_visitor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12954852/