gpt4 book ai didi

c++ - 将 Functor 转换为 Object of Type 函数

转载 作者:太空狗 更新时间:2023-10-29 21:36:18 25 4
gpt4 key购买 nike

假设我有这个功能:

template <typename T>
void foo(function<T(const T&, const T&)> op, const T& lhs, const T& rhs) {
cout << op(lhs, rhs) << endl;
}

这是 legal code :

function<int(const int&, const int&)> op = plus<int>();

foo(op, 13, 42);

但是当我这样做的时候:

foo(plus<int>(), 13, 42)

我得到错误:

No matching function for call to foo(std::plus<int>, int, int)

为什么我可以初始化类型为function<int(const int&, const int&)>的对象?来自 plus<int>()但我不能通过 plus<int>()进入 function<T(const T&, const T&)> 类型的参数?跟模板有关系吗?

最佳答案

引自标准第 14.8.1.6 节:

Implicit conversions (Clause 4) will be performed on a function argument to convert it to the type of the corresponding function parameter if the parameter type contains no template-parameters that participate in template argument deduction.

这在您的情况下不起作用,因为尚未明确提供模板参数。编译器需要进行推导。因此,按照上述,它不会进行从仿函数到 std::function 的隐式转换。 .

所以,你可以这样做(正如@flatmouse 在评论中提到的那样):

foo<int>(plus<int>(), 13, 42);

之所以可行,是因为所有模板参数都已明确指定,因此无需执行模板参数推导。根据上述标准引用,隐式转换应该适用于此。

关于c++ - 将 Functor 转换为 Object of Type 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com