我想做一個簡單的事情:如何在C++中使用lambda作爲模板參數與默認值?
void DoUntil(auto predicate = [] { return false; });
顯然,這並不工作 - 我必須使用一個模板參數:
template <typename P>
void DoUntil(P predicate = [] { return false; });
但這種說法並沒有工作,要麼 - 鐺給出了一個錯誤:
error: no matching function for call to …
note: candidate template ignored: couldn't infer template argument 'P'
如果我做調用不帶參數的功能,不知何故編譯器無法從默認參數推斷類型:
int main() { DoUntil(); }
我不想以任何方式使用std::function<>
。
有沒有其他可能的解決方案來解決我的問題?
這是一個未推演的上下文。從[cppreference](http://en.cppreference。com/w/cpp/language/template_argument_deduction)非推導上下文,一個模板參數,用於函數參數的參數類型中,該函數參數的默認參數正在調用中進行參數推導。 – felix
爲什麼你不想使用'std :: function'? –