在此之前我已经发布了一些关于在快速委托(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”辅助函数,由于大小的原因,该函数可以进入它自己的文件中。
大家觉得怎么样?
.h
文件中包含 200 个声明,.cpp 文件中包含 200 个实现(以及其他函数).h
文件中有 200 个声明,一个单独的“handlers.cpp”实现文件- 没有声明,在构造函数中分配了 200 个 lambda
- 没有声明,在其自己文件的
initializeMap
函数中分配了 200 个 lambda。
提前致谢!
最佳答案
我的观点是,尽可能使用 lambda。它们更易于维护。例如,如果您有一个成员函数,则每次更改它时都必须更新声明和定义,并且还必须为其分配唯一的名称。 Lambda 是更好的选择。如果我可以对成员变量进行自动类型推导,我就永远不会使用成员函数。
关于lambda - 很多函数还是很多 Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4634188/