Я пытаюсь реализовать шаблон посетителя с шаблонными производными классами.
Я работаю с gcc 4.5
вот VisitorTemplate.hpp, я специализировал Derived в классе Visitor, но я хотел бы иметь возможность обрабатывать любой тип:
редактировать: благодаря предложениям interjay, теперь код компилируется и работает без ошибок
#ifndef VISITORTEMPLATE_HPP_
#define VISITORTEMPLATE_HPP_
#include <iostream>
#include <string>
using namespace std;
template<class T> Derived;
class Visitor
{
public:
virtual void visit(Derived<string> *e) = 0;
};
class Base
{
public:
virtual void accept(class Visitor *v) = 0;
};
template<class T>
Derived: public Base
{
public:
virtual void accept(Visitor *v)
{
v->visit(this);
}
string display(T arg)
{
string s = "This is : " + to_string(arg);
return s;
}
};
class UpVisitor: public Visitor
{
virtual void visit(Derived<string> *e)
{
cout << "do Up on " + e->display("test") << '\n';
}
};
class DownVisitor: public Visitor
{
virtual void visit(Derived<string> *e)
{
cout << "do Down on " + e->display("test") << '\n';
}
};
#endif /* VISITORTEMPLATE_HPP_ */
main.cpp
Base* base = new Derived<string>();
Visitor* up = new UpVisitor();
Visitor* down = new DownVisitor();
base->accept(up);
base->accept(down);
Теперь моя цель — использовать Derived в посещении без специализации; к сожалению, посещение - это виртуальный метод, поэтому я не могу его шаблонировать
class
не совсем соответствуетtemplate
s - person iammilind   schedule 24.10.2011