Теперь у меня есть метод шаблона, подобный этому:
template<typename T>
void f(typename vector<T>::iterator it)
{
//implemenation
...
}
int main()
{
vector<int> v;
//initialization of v;
...
f(v.begin());
return 0;
}
Но когда я компилирую как "g++ THIS_FILE -o TARGET_RUNNABLE", компиляция говорит
no matching function for call to ‘f(std::vector<int>::iterator)’
template argument deduction/substitution failed:
couldn't deduce template parameter ‘T’
Я понимаю, что нужно добавить ключевое слово "typename" перед vector::iterator. Но это все равно неправильно. Кто-нибудь знает, как решить эту проблему?
template<typename It> void f(It it);
(и затем по-прежнему использоватьf(v.begin())
). Если вам нужен тип контейнера, вы должны передать другой аргумент (template<class Cont, class It> void f(Cont&, It);
) или явно указать аргумент шаблонаtemplate<class Cont, class It> void f(It); f<std::vector<int>>(v.begin());
). - person dyp   schedule 17.10.2013