爲什麼這不適用於C++?
爲什麼我不能像這樣將foo
的參數限制爲std::vector<T>::iterator
,什麼是最好的解決方法?爲什麼迭代器類型演繹失敗?
#include <vector>
template<class T>
void foo(typename std::vector<T>::iterator) { }
int main()
{
std::vector<int> v;
foo(v.end());
}
的錯誤是:
In function ‘int main()’:
error: no matching function for call to ‘foo(std::vector<int>::iterator)’
note: candidate is:
note: template<class T> void foo(typename std::vector<T>::iterator)
note: template argument deduction/substitution failed:
note: couldn’t deduce template parameter ‘T’
解決方法是當模板參數無法推斷時通常使用的解決方法,明確指出:'foo(v.end());' –
2013-03-04 18:50:34