我已經在C++中定義的以下功能:模板與函數類型參數的原因編譯器錯誤
template<class Type> Type GetMedian(const vector<Type>& items, function<bool(Type, Type)> comp) {
vector<Type> copied_items(items);
std::nth_element(copied_items.begin(), copied_items.begin() + copied_items.size()/2, copied_items.end(), comp);
return copied_items[copied_items.size()/2];
}
然而,當我試圖把它叫爲GetMedian(v, greater<uint32_t>())
,我的編譯器(鐺)抱怨:
error: no
matching function for call to 'GetMedian'
GetMedian(v, greater<uint32_t>());
^~~~~~~~~
note:
candidate template ignored: could not match 'function' against 'greater'
template<class Type> Type GetMedian(const vector<Type>& items, function...
不過,我沒有看到這個錯誤,每當我更改爲不使用模板,如:
uint32_t GetMedian(const vector<uint32_t>& items, function<bool(uint32_t, uint32_t)> comp) {
vector<uint32_t> copied_items(items);
std::nth_element(copied_items.begin(), copied_items.begin() + copied_items.size()/2, copied_items.end(), comp);
return copied_items[copied_items.size()/2];
}
有沒有什麼辦法讓我的功能像我想要的那樣靈活?
您是否希望模板強制執行提供的比較函數與矢量類型相同,或者如果使用不正確的比較函數會生成編譯器錯誤/警告(如果類型不相同),是否可以使用? – NathanOliver
我懷疑這是一個不可推卸的背景問題。您可以通過顯式使用模板參數來解決問題。 'GetMedian(...)'。 –