我在此之前发布了几个关于使用std::function
而不是快速代理的问题,以及如何将std::function
存储在集合中以显示可添加和删除的事件的行为。在编写一整套小型的课程时,我还询问了最佳实践,并且这个小小的设计决定也已经得到了解决。这是一个伟大的社区!很多功能vs很多Lambdas?
现在,序言一边,我必须有我的结构,现在是编写所有处理传入数据的处理程序的时候了。我有一个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个实现以及一个大屁股源文件。
我并没有用所有这些处理程序污染我的班级,我认为“嗯,它们只是句柄,为什么不使用lambdas?似乎很简单,当构建类时它可以将所有这些匿名函数分配给地图。完成任务!
然后我意识到构造将是巨大的。我可以称之为“initializeMap`辅助函数可以想见,走在它自己的文件,因为大小。
你们觉得呢?
- 200报价
.h
文件,200个实现(除其他功能)在cpp文件 - 200声明在
.h
文件,单独的“handlers.cpp`实现文件 - 没有声明,分配在构造函数200层的lambda
- 否声明,在其自己的文件中分配了
initializeMap
函数中的200个lambda表达式。
在此先感谢!
不确定你的意思是'动态'...数据是用代码进来的,并且必须调用该代码的适当处理程序,因此具有`std :: function`的地图。如果这不是动态的意思,你是什么意思? – 2011-01-08 14:22:29
我只是指lambda函数。对不起,如果我不清楚。 – Cray 2011-01-08 14:26:00