سؤال

#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