簡體   English   中英

C ++模板將不接受迭代器

[英]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>::iteratorT*時會發生什么:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM