Hi All,

 

I am using the boost::variant with the binary visitor algorithm, apply_visitor.

 

struct UnknownValue {};

typedef boost::variant<UnknownValue, long, unsigned long, double, string, char> ValueType;

 

I am using apply_visitor for binary visitation as below:

 

class AddVisitor : public boost::static_visitor<> {

public:

                template <typename T>

                void operator()(const T &lhs, const T &rhs) {

                                T val = lhs + rhs;

                }

 

                template <typename T, typename R>

                void operator()(const T &lhs, const R &rhs) {

                                // do nothing…different types

                }

 

                template <typename T>

                void operator()(const T &lhs, const UnknownValue &rhs) {

                                // do nothing…we have an unknown value

}

 

template <typename T>

                void operator()(const UnknownValue &lhs, const T &rhs) {

                                // do nothing…we have an unknown value

}

 

void operator()(const UnknownValue &lhs, const UnknownValue &rhs) {

                                // do nothing…we have an unknown value

}

};

 

The above is not complete because I can do addition if the types are long and unsigned long or long and double or long and char…etc.

 

What is the preferred method for doing this? Do I need to create an overridden operator() for every argument combination that is valid or can I get the argument types in the function?

 

Thanks

 

 Glenn