我目前在 C++ 中使用这段代码来调用函数指针,如果它不为空(我有一些事件,如 onCreate、onDestroy 等,它们是可以分配的函数指针):
#define AssertiveCall(_fn, _args) \
{ \
if (_fn != nullptr) \
{ \
return (_fn##_args); \
} \
}
我想将它转换成一个模板,这样我仍然可以获得简写的好处,但没有 #define macro
的丑陋之处。我该怎么做?
最佳答案
作为引用,带有可变参数模板的实现 - 以防其他人遇到类似问题并且可以使用可变参数模板:
template <typename Return, typename ...Parameters, typename ...Args>
auto AssertiveCall(Return (*function)(Parameters...), Args&& ...args)
-> Return
{
if (function != nullptr) {
return (*function)(std::forward<Args>(args)...);
} else {
return Return{};
}
}
关于c++ - 仅当函数指针不为 null 时才调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13172895/