如何为接收函数指针的参数设置默认值?无需额外定义空函数
优化方案:无需额外空函数的实现
有两种更简便的实现方式可以替代你当前的方案,不需要额外定义empty_func():
方法1:使用nullptr作为默认参数并做空指针检查
将默认参数设为nullptr,在函数内部判断指针非空时再调用,避免空指针解引用:
void func(void (*additional_func)() = nullptr) { if (additional_func) { // 等价于 additional_func != nullptr additional_func(); } // some other code... }
这种方法兼容性最好,支持所有C++标准版本,同时能明确区分“未传递函数”和“传递空操作函数”的场景。
方法2:利用无捕获Lambda作为默认参数(C++11及以上)
无捕获的Lambda表达式可以隐式转换为对应的函数指针,直接将其作为默认参数,省去额外函数定义:
void func(void (*additional_func)() = [](){}) { additional_func(); // some other code... }
这种写法更简洁,默认行为就是执行空操作,不需要额外的判断逻辑,但要求编译器支持C++11或更高版本。
内容的提问来源于stack exchange,提问作者Kesto2
相关产品推荐
相关产品推荐

