小编Cha*_*els的帖子

传递给模板函数的两个lambda使参数的类型推导变得模糊 - 为什么?

我有一个模板,如果我传递一个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) …

c++ lambda templates ambiguity

4
推荐指数
1
解决办法
264
查看次数

标签 统计

ambiguity ×1

c++ ×1

lambda ×1

templates ×1