[英]C++ template won't accept iterators
我正在重新學習C ++,並且首先嘗試了應該是一種簡單的算法:QuickSort。 我的函數具有以下簽名:
template <class T>
void QSort(typename std::vector<T>::iterator begin, typename std::vector<T>::iterator end)
它在我的主要功能中被調用:
int main()
{
std::vector<int> unsort({56,32,11,45,67,81,12,5});
std::vector<int>::iterator b=unsort.begin();
std::vector<int>::iterator e=unsort.end();
QSort(b, e);
return 0;
}
並給出此錯誤:
C:\Users\Deus\Projects\QSort\main.cpp||In function 'int main()':|
C:\Users\Deus\Projects\QSort\main.cpp|49|error: no matching function for call to 'QSort(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&)'|
||=== Build finished: 1 errors, 0 warnings ===|
似乎編譯器在解析T應該是什么時遇到了麻煩。 有什么方法可以做我想做的事情,還是應該只將參數聲明為T類型,並處理產生的不確定性?
編譯器無法從函數調用中推斷出T
想一想當std::vector<T>::iterator
為T*
時會發生什么:
int *b = ...;
int *e = ...;
QSort(b, e);
通常,如果您編寫typename Something<TemplateParameter>::anotherThing
,則無法在調用中推斷出TemplateParemter
。 必須明確提供
QSort<int>(b, e);
我建議只使用T
作為參數類型。 這樣,您不僅可以接受向量迭代器,還可以接受T*
或std::deque<T>::iterator
和任何其他隨機訪問迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.