Передача шаблона typedef в качестве аргумента в шаблон функции

Я пытаюсь передать шаблон typedef в качестве аргумента в шаблон функции. Однако я получаю следующие ошибки:

TestTemplates.cpp: 11: ошибка: ожидаемый неквалифицированный идентификатор перед токеном &

TestTemplates.cpp: 11: ошибка: ожидаемый неквалифицированный идентификатор перед токеном &

TestTemplates.cpp: 11: ошибка: ожидаемый инициализатор перед токеном &

TestTemplates.cpp:25: ошибка: 'func' не был объявлен в этой области

#include <iostream>
#include <vector>

template<class T>
struct MyVector
{
    typedef std::vector<T> Type;
};

template<class T>
void func( const MyVector<T>::Type& myVec )
{
    for( MyVector<T>::Type::const_iterator p = myVec.begin(); p != myVec.end(); p++)
    {
        std::cout<<*p<<"\t";
    }
}

int main()
{
    MyVector<int>::Type myVec;
    myVec.push_back( 10 );
    myVec.push_back( 20 );

    func( myVec );
}

Может кто-нибудь указать, как исправить эту ошибку. Я посмотрел на некоторые сообщения, но не могу найти решение. Спасибо

1 ответ

Решение

Вы должны сообщить компилятору, что это имя типа

void func( const typename MyVector<T>::Type& myVec )

Затем вам нужно явно помочь компилятору определить тип функции:

func<int>( myVec );

Кстати, вопрос называется " двухэтапный поиск"

Другие вопросы по тегам