我有一个模板,如果我传递一个lambda,但在一个相关的模板,其中两个lambda映射到相同的模板类型,它不能推断该类型,并且MSVC++ Express 2013抱怨模板参数是不明确的.为了清楚起见,这里没有超载(或专业化) - 下面的两个例子是唯一具有这些标识符的实体.以下是模板,它只是在参数上应用可调用对象并返回结果:
template <class A, class OP>
auto WhichOp1(A argument, OP firstOp)->decltype(firstOp(argument)) {
return firstOp(argument);
}
template <class A, class OP>
auto WhichOp2(A argument, OP firstOp, OP secondOp)->decltype(firstOp(argument)) {
return firstOp(argument) + secondOp(argument);
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样成功使用WhichOp1:
int e = WhichOp1(2, [](int i){return i * 2; });
Run Code Online (Sandbox Code Playgroud)
但类似的调用WhichOp2将无法编译:
int d = WhichOp2(2, [](int i){return i * 2; }, [](int i){return i * 3; });
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误C2782:'unknown-type chaj :: ops :: WhichOp2(A,OP,OP)':模板参数'OP'不明确
IntelliSense:没有函数模板实例"chaj :: ops :: WhichOp2"匹配参数列表参数类型是:(int,lambda [] int(int i) …