模板前向声明Class(访问者设计模式)

Forward Declaration of Template Class (Visitor Design Pattern)

我正在尝试转发声明模板化 class A<T> 以用于 class Visitor。就我的目的而言,声明 class Aint 实例 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 是模板。然后你可以专攻任何类型。