boost::static_visitor with multiple arguments
boost, boost-variant, c++
Solution
The "additional argument" that gets given to each call is the `this` pointer. Use it to pass whatever additional information that you need:
#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);
}
Problem
``` 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); ``` Is it possible to change the visitor such that it receives extra data as follows: ``` class Append: public boost::static_visitor<> { public: void operator()(int, const std::string&) {} void operator()(double, const std::string&) {} }; ``` This string value changes during the lifetime of the Append object. Passing the string in via the constructor is not an option in this case.