Как вынести из шаблонного класса реализацию функции?

Не могу понять синтаксис возврата итератора класса с помощью метода класса. Вот небольшой пример:

template<typename T>
class Test{
public:
    class Iterator{
        Iterator();
    };
    Iterator Find();
};

template<typename T>
Test::Iterator Test<T>::Find() {
    return Test::Iterator();
}

На такую запись компилятор ругается на вынесенную реализацию метода.

'Test' is not a class, namespace, or enumeration

Как нормально вынести реализацию метода в этом случае? Так же интересует как вынести объявление класса Iterator из класса, который его содержит. Т.е в классе написать только class Iterator; а остальное объявление написать вне класса.


Ответы (1 шт):

Автор решения: n1tr0xs

Вот так можно:

template<typename T>
class Test{
public:
    class Iterator;
    Iterator Find();
};

template<typename T>
class Test<T>::Iterator{
public:
    Iterator();
};

template<typename T>
typename Test<T>::Iterator Test<T>::Find(){
    return Iterator();
}
→ Ссылка