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.

Original source