c++ - 仅当函数指针不为 null 时才调用它

标签 c++ function pointers c-preprocessor

我目前在 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/

相关文章:

c++ - 带有最小示例的 Visual Studio LNK1104

c++ - 在 [] 运算符的情况下,为 unordered_map 中的元素设置默认构造函数

c++ - 删除 IE9 缓存和 Cookie

用户输入的 C++ 数组大小

c++ - 指向结构成员?

C数据结构、变量

c++ - 如何使用 map vector

c++ - 如何传递缺少参数的函数?

C++ 是否可以有一个通用的函数指针?

javascript - JS : mouseOver function: new state doesn't pick up css from the old state