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