lambda - 很多函数还是很多 Lambda?

标签 lambda delegates c++11 header-files anonymous-function

在此之前我已经发布了一些关于在快速委托(delegate)上使用 std::function 以及存储 std::function 的方式的问题> 在集合中展示可以添加和删除的事件的行为。我还询问了编写大量 EventArg 类型的小类时的最佳实践,并且这个小小的设计决策也已被搁置。这是一个很棒的社区!

现在,除了序言之外,我的结构已经就位,是时候编写所有处理传入数据的处理程序了。我有一个 std::map,看起来像这样:

typedef std::function<void(const CommandData&)> CommandDelegate;
typedef boost::shared_ptr<CommandDelegate> CommandDelegatePtr;
typedef std::map<short, CommandDelegatePtr> CommandMap;

我希望为此添加大约 200 个处理程序。我可以在标准成员函数和 lambda 之间进行选择。

在考虑成员函数时,我首先想到的是 200 个声明和 200 个实现以及一个大源文件。

与其用所有这些处理程序污染我的类,我想“好吧,它们只是句柄,为什么不使用 lambda?这看起来很简单,当构造类时,它可以将所有这些匿名函数分配给映射。完成!

然后我意识到构造函数会很大。我可以调用“initializeMap”辅助函数,由于大小的原因,该函数可以进入它自己的文件中。

大家觉得怎么样?

  1. .h 文件中包含 200 个声明,.cpp 文件中包含 200 个实现(以及其他函数)
  2. .h 文件中有 200 个声明,一个单独的“handlers.cpp”实现文件
  3. 没有声明,在构造函数中分配了 200 个 lambda
  4. 没有声明,在其自己文件的 initializeMap 函数中分配了 200 个 lambda。

提前致谢!

最佳答案

我的观点是,尽可能使用 lambda。它们更易于维护。例如,如果您有一个成员函数,则每次更改它时都必须更新声明和定义,并且还必须为其分配唯一的名称。 Lambda 是更好的选择。如果我可以对成员变量进行自动类型推导,我就永远不会使用成员函数。

关于lambda - 很多函数还是很多 Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634188/

相关文章:

c++ - 是否有交换 C++ vector 中的两个段的函数?

c++ - 在 C++ 中读取 csv 列名

c++ - 为什么 C++11 中的 `i = i++ + 1` 行为未定义?

c# - Windows Mobile 6 紧凑框架的线程化

c# - c#中的委托(delegate)和c++中的函数指针有什么区别?

c# - 反射 - 将一个委托(delegate)添加到另一个委托(delegate)的调用列表

xcode - 无法以编程方式调用委托(delegate)方法吗?

javascript - 如何通过 IoT 提高 AWS Lambda 和 Web 应用程序之间 MQTT 消息的可靠性

c++ - 函数模板和 lambda 表达式之间的区别

c++ - 二进制通用 lambda 不匹配 ptr 到函数参数?