gpt4 book ai didi

c++ - 成员函数模板推导指南或其他方法让编译器知道如何调用函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:25:54 24 4
gpt4 key购买 nike

struct setup_entry 
{
template< typename T >
void Disable( bool(*p)(T*) ) { ... }
}

调用禁用:

setup_entry X;

Case 1: X.Disable( [](int*)->bool{...} ); //FAIL to deduce T
Case 2: X.Disable<int>( [](int*)->bool{...} ); //OK to deduce T

我想用例 1。(对用户来说更容易)

有什么想法吗?


记录的简化最终解决方案是这样做:

template< typename T >
void Disable( T&& Callback )
{
auto p = +Callback;
...
}

最佳答案

你不能那样做,因为在 template argument deduction 中不会考虑隐式转换(从 lambda 到函数指针) ; T 无法推导。

Type deduction does not consider implicit conversions (other than type adjustments listed above): that's the job for overload resolution, which happens later.

如果你想坚持自动类型推导,你可以将 lambda 显式转换为函数指针,例如

X.Disable(+[](int*)->bool{...} ); 
// ^

或者

X.Disable(static_cast<bool(*)(int*)>([](int*)->bool{...}));

关于c++ - 成员函数模板推导指南或其他方法让编译器知道如何调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54572489/

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