#include <string>
#include "boost/variant/variant.hpp"
#include "boost/variant/apply_visitor.hpp"
using namespace std;
class Base
{
public:
Base(){}
~Base(){}
void AddField(int tag, int value){std::cout << "Base::AddField " << tag << ", " << value << std::endl;}
void AddField(int tag, string value){std::cout << "Base::AddField " << tag << ", " << value << std::endl;}
};
class A : public Base
{
public:
A(){}
~A(){}
};
class B : public Base
{
public:
B(){}
~B(){}
};
class foo_visitor
: public boost::static_visitor<>
{
public:
foo_visitor(int tag){mTag = tag;}
template <typename T>
void operator()(T &a, int &v) const {
a->AddField(mTag, v);
}
private:
int mTag;
};
int main(int argc, char **argv)
{
typedef boost::variant<A*,B*> AB;
AB ab = new A();
int tag = 1;
int v = 2;
boost::apply_visitor(foo_visitor(tag), ab, v);
return 0;
}
I am getting this compile error:
apply_visitor_unary.hpp:60:43: error: request for member ‘apply_visitor’ in ‘visitable’, which is of non-class type ‘int’
What's wrong with my code?
int
is not variant
really.
Overloads accepting two operands invoke the binary function call operator of the given visitor on the content of the given variant operands.
http://www.boost.org/doc/libs/1_52_0/doc/html/boost/apply_visitor.html