模板参数推导/替换失败,lambda作为函数指针
Template argument deduction/substitution failed with lambda as function pointer
我想知道为什么在下面的代码中,编译器不能使用lambda作为函数foo((的参数(模板参数推导/替换失败(,而一个简单的函数可以工作:
template<class ...Args>
void foo(int (*)(Args...))
{
}
int bar(int)
{
return 0;
}
int main() {
//foo([](int) { return 0; }); // error
foo(bar);
return 0;
}
英特尔编译器(版本18.0.3(
template.cxx(12): error: no instance of function template "foo" matches the argument list
argument types are: (lambda [](int)->int)
foo([](int) { return 0; }); // error
^
template.cxx(2): note: this candidate was rejected because at least one template argument could not be deduced
void foo(int (*)(Args...))
有什么想法吗?
模板参数推导不考虑隐式转换。
类型推导不考虑隐式转换(除了上面列出的类型调整(:这是重载解决的工作,稍后会发生。
您可以显式地将lambda转换为函数指针,例如,您可以使用static_cast
、
foo(static_cast<int(*)(int)>([](int) { return 0; }));
或operator+
、
foo(+[](int) { return 0; });
相关文章:
- 模板函数指针和lambda
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- C++:Lambda 函数指针转换的用例是什么?
- 如何在 lambda 中访问捕获的此指针的"typeid"?
- 如何通过指针传递lambda函数?
- 使用带有 lambda 函数指针的模板
- 函数指针和 lambda 的内存管理
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 如何组合lambda,vairadic函数和函数指针?
- C++将 lambda 函数另存为成员变量,而不使用函数指针进行优化
- Lambda 到函数指针适配器的理解
- 模板参数推导/替换失败,lambda作为函数指针
- 将引用和指针传递给 lambda
- 将捕获的 lambda 包装为模板函数中的函数指针
- 如何从 lambda 表达式中获取函数指针?
- 通过 lambda 在空指针处赋值
- 如何定义与将 Lambda 与捕获作为回调一起使用兼容的函数指针
- 如何修改lambda指针捕获
- 如何在模板中返回 lambda 指针
- 数组衰减为Lambda指针