模板类的前向声明(访客设计模式)

时间:2018-04-28 16:48:00

标签: c++ templates forward-declaration visitor-pattern

我正在尝试转发声明一个模板化的类A<T>,以便在类Visitor中使用。我的目的就是声明类int的{​​{1}}实例A<int>就足够了。我尝试了两种方法,但都有不同的错误,我不知道如何继续。

这是我的错误的MWE:

A

您可以尝试运行代码here以查看我收到的错误:

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

我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为你在这里混合了一些东西,你应该将accept方法声明为:

template<class T>
void A<T>::accept(visitor::Visitor* v){
    v -> visit(this);
}

因为A类是模板。然后你可以专注于任何类型。