Почему этот двоичный файл apply_visitor не работает?

#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;
}

Я получаю эту ошибку компиляции:

apply_visitor_unary.hpp: 60: 43: ошибка: запрос для члена «apply_visitor» в «посещаемые», который имеет
неклассный тип «int»

Что не так с моим кодом?

3

Решение

int не является variant действительно.

Перегрузки, принимающие два операнда, вызывают вызов двоичной функции
оператор данного посетителя по содержанию данного варианта
операнды.

http://www.boost.org/doc/libs/1_52_0/doc/html/boost/apply_visitor.html

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector