Предварительное объявление класса шаблона (шаблон дизайна посетителя) - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь переслать объявление шаблонного класса A<T> для использования в классе Visitor. Для моих целей было бы достаточно объявить int экземпляр A<int> класса A. Я пробовал два подхода, но оба дают разные ошибки, и я не знаю, как действовать.

Вот 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;
}

Вы можете попробовать запустить код здесь , чтобы увидеть полученную ошибку:

error: specializing member 'nsp::A<int>::accept' requires 'template<>' syntax

Я ценю любую помощь.

1 Ответ

0 голосов
/ 28 апреля 2018

Я думаю, что вы смешиваете здесь вещи, вы должны объявить метод accept следующим образом:

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

как класс А. является шаблоном. Тогда вы можете специализироваться для любого типа.

...