取以下函式:
template<typename T>
decltype(auto) find_median(T begin,
T end,
bool sorted = false,
auto comparison = [](auto a, auto b){return a < b;}){
assert(begin != nullptr);
assert(end != nullptr);
return sorted ? find_median_sorted(begin, end) : find_median_unsorted(begin, end, comparison);
}
請注意,我將comparison引數設定為默認值[](auto a, auto b){return a < b;}。所以如果我像下面這樣呼叫這個函式:find_median(std::addressof(arr), std::addressof(arr[9]))where arris an std::array,這應該可以作業。但它不起作用,有人能告訴我為什么嗎?
uj5u.com熱心網友回復:
您可以為已知型別提供默認值,但不能為這樣的推導型別提供默認值。這不是語言支持的東西。
您必須為型別和值提供默認值:
template<typename T, typename Cmp = std::less<>>
decltype(auto) find_median(T begin,
T end,
bool sorted = false,
Cmp comparison = {})
{
// ...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358157.html
