模板前向声明Class(访问者设计模式)
Forward Declaration of Template Class (Visitor Design Pattern)
我正在尝试转发声明模板化 class A<T>
以用于 class Visitor
。就我的目的而言,声明 class A
的 int
实例 A<int>
就足够了。我尝试了两种方法,但都给出了不同的错误,我不知道如何进行。
这是我的错误的 MWE:
namespace visitor{
class Visitor{
public:
virtual void visit(nsp::A<int>*) = 0;
};
}
namespace nsp{
template <class T>
class A{
A();
T t_attribute;
void accept(visitor::Visitor*);
};
void A<int>::accept(visitor::Visitor*){
v -> visit(this);
}
}
int main(){
return 0;
}
您可以尝试 运行 代码 here 来查看我得到的错误:
error: specializing member 'nsp::A<int>::accept' requires 'template<>' syntax
感谢任何帮助。
我认为你在这里混淆了东西,你应该将接受方法声明为:
template<class T>
void A<T>::accept(visitor::Visitor* v){
v -> visit(this);
}
as class A 是模板。然后你可以专攻任何类型。
我正在尝试转发声明模板化 class A<T>
以用于 class Visitor
。就我的目的而言,声明 class A
的 int
实例 A<int>
就足够了。我尝试了两种方法,但都给出了不同的错误,我不知道如何进行。
这是我的错误的 MWE:
namespace visitor{
class Visitor{
public:
virtual void visit(nsp::A<int>*) = 0;
};
}
namespace nsp{
template <class T>
class A{
A();
T t_attribute;
void accept(visitor::Visitor*);
};
void A<int>::accept(visitor::Visitor*){
v -> visit(this);
}
}
int main(){
return 0;
}
您可以尝试 运行 代码 here 来查看我得到的错误:
error: specializing member 'nsp::A<int>::accept' requires 'template<>' syntax
感谢任何帮助。
我认为你在这里混淆了东西,你应该将接受方法声明为:
template<class T>
void A<T>::accept(visitor::Visitor* v){
v -> visit(this);
}
as class A 是模板。然后你可以专攻任何类型。