【发布时间】:2011-01-08 13:57:14
【问题描述】:
在此之前我已经发布了一些关于在快速代表上使用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 个处理程序。我可以在标准成员函数和 lambdas 之间进行选择。
在考虑成员函数时,我首先想到的是 200 个声明和 200 个实现以及一个大源文件。
与其用所有这些处理程序污染我的类,我想“好吧,它们只是句柄,为什么不使用 lambdas?看起来很简单,当类被构造时,它可以将所有这些匿名函数分配给映射。作业完成!
然后我意识到构造函数会很大。我可以调用一个“initializeMap”辅助函数,由于它的大小,可以想象它可以放入它自己的文件中。
你们怎么看?
-
.h文件中的 200 个声明,.cpp 文件中的 200 个实现(以及其他函数) -
.h文件中的 200 个声明,一个单独的“handlers.cpp”实现文件 - 没有声明,在 ctor 中分配了 200 个 lambda
- 没有声明,在它自己的文件中的
initializeMap函数中分配了 200 个 lambda。
提前致谢!
【问题讨论】:
标签: lambda delegates c++11 header-files anonymous-function