我有調用函數的一個問題:C++隱性/明確的模板法專業化問題
namespace Sort {
enum Type {
insertion, selection, merge
};
template <class Elem = int, class Container = std::vector<Elem>>
void sort(std::shared_ptr<Container> vectorPointer,
std::function<bool(Elem, Elem)> comparator = std::less<Elem>(),
Type type = selection) {
switch (type) {
case insertion:
insertionSort(vectorPointer, comparator);
case selection:
selectionSort(vectorPointer, comparator);
case merge:
mergeSort(vectorPointer, comparator);
}
}
}
當我把它作爲這樣:但是如果我開始更換
std::shared_ptr<std::vector<int>> intVector;
Sort::sort(intVector);
一切都OK,默認參數:
Sort::sort(intVector, std::less<int>(), merge);
我得到一個錯誤信息:Candidate template ignored: could not match 'function' against 'less'
更新:
我終於使它的工作 - 明確專門的函數調用似乎做的伎倆。另外,我沒有提供枚舉值的名稱空間。
Sort::sort<int, std::vector<int>>(intVector, std::less<int>(), Sort::merge)
謝謝你們!
無關你的問題,但有你有一個共同的指向容器的特殊原因?這是相當罕見的,在許多情況下不需要。 –
至於你的問題,我個人推廣甚至*進一步與模板類型,並使兩個第一個參數模板以及。甚至可以使函數模擬幾乎所有對容器起作用的[標準算法](http://en.cppreference.com/w/cpp/algorithm)函數,並將兩個迭代器作爲參數而不是容器(並因此放棄整個'Container'模板參數)。例如,如何使用模板使用'std :: less',爲什麼不看[[std :: map]](http://en.cppreference.com/w/cpp/container/map)? –
這是我用C++編寫的第一批代碼之一,現在我正在重構它。指針是讓事情對我有用的第一件事。我知道它有多痛苦。一旦我找出爲什麼它不起作用,我將刪除指針。 –