template < class A, class B, class R = A >
void addMultiplyOperation(std::function< R (const A&, const B&) > func)
{
...
}
addMultiplyOperation< float, int >([](float a, int b) { return a * b; });
這使編譯器錯誤:默認模板參數忽略
In function 'int main(int, char**)':
error: no matching function for call to 'addMultiplyOperation(main(int, char**)::__lambda1)'
addMultiplyOperation< float, int >([](float a, int b) { return a * b; });
^
note: candidate is:
note: template<class A, class B, class R> void addMultiplyOperation(std::function<R(const A&, const B&)>)
void addMultiplyOperation(std::function< R (const A&, const B&) > func)
^
note: template argument deduction/substitution failed:
note: 'main(int, char**)::__lambda1' is not derived from 'std::function<R(const float&, const int&)>'
addMultiplyOperation< float, int >([](float a, int b) { return a * b; });
^
儘管具有R
模板參數默認初始化爲A
,我有提供第三個參數,以便這編譯。爲了使用默認的模板參數,還有其他事情需要我去做嗎?
我使用的是g ++ v4.8.1。
+1我可以理解'A'沒有被推導出來,但是我告訴編譯器A是什麼,'R'和'A'是一樣的。但是,我再也不必實現這些語言邊緣案例,所以我不會抱怨... – cmannett85