문제

#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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top