我有一些回调定义,如:
using TSomeCallback = std::function<ReturnType(Type1, Type2, Type3, …)>;
我也有一些方法接受这个回调作为参数:
void SetCallback(TSomeCallback);
我只想定义一个模板,直接从TSomeCallback示例化no-op callback:
void SetCallback(TSomeCallback = GetNoopCallback<TSomeCallback>()); // or
void SetCallback(TSomeCallback = GetNoopCallback(TSomeCallback())); // or any other way.
我找到了this答案-它很好,但我不知道如何改进它以达到我的目的。
4条答案
按热度按时间dauxcl2d1#
你可以这样做
但我建议你
然后检查回调函数是否为非空。或者如果你不想被回调的话,可以不提供默认参数,也可以不调用
SetCallback
!7kqas0il2#
你可以使用lambda来构造一个什么都不做的
std::function< ... >
。假设返回类型是void
,那么这样就可以了:pxy2qtax3#
您可以为
void
实现GetNoopCallback
-返回如下函数:然后:
ie3xauqp4#
现在只需要将模板变量强制转换或使用为右值:
您可以进一步消除对返回类型的需求:
现在使用
any_function_default
作为函数的通用默认值: