c++ - 让编译器为 std::function 生成一个空的默认函数

标签 c++

在这段代码中,我希望 ... 成为“具有匹配参数的空函数”的非冗长方式:

std::function<void(int foo, float bar)> somefunc  = ...;

我希望它生成与此对应但不重复参数类型的代码:

std::function<void(int foo, float bar)> somefunc  = [](int, float) {};

背景

我可以这样声明和初始化一个std::function:

std::function<void(int foo, float bar)> somefunc;

然后我可以这样调用它:

if(somefunc) {
    somefunc(42, 4711.0f);
}

但是 if 语句使代码膨胀(我不太喜欢空指针),所以我可以用默认的空实现来定义函数:

std::function<void(int foo, float bar)> somefunc  = [](int, float) {};

然后调用将很简单:

somefunc(42, 4711.0f);

但是像这样重复参数会有点重复,所以我想要生成空实现的东西。

最佳答案

C++14 支持泛型 lambda:

std::function<void(int foo, float bar)> somefunc  = [](auto&&...) {};
somefunc(42, 4711.0f);

关于c++ - 让编译器为 std::function 生成一个空的默认函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57522428/

相关文章:

c++ - 为什么重载函数不绑定(bind)到更具体的重载?

c++ - 有没有办法让函数返回一个类型名?

c++ - 如何使用非托管 C++ 在 Windows 上获取已安装字体的列表?

c++ - 为什么模板参数中的 enable_if_t 提示重新定义?

c++ - Qt 从 QGridLayout 的自定义对象访问变量

c++ - 什么库实现消息的异步处理?

c++ - 链接静态库的Makefile错误

c++ - 使用 std::chrono 计算耗时时出现“段错误”

c++ - 如何在 Visual Studio 2017 中使用 GLOP 线性求解器 [C++]

c++ - 什么是在 C++ 中重载构造函数的正确而优雅的方法