很多函数还是很多lambda?
在此之前,我已经发布了一些关于在快速委托上使用很多函数还是很多lambda?,lambda,delegates,c++11,header-files,anonymous-function,Lambda,Delegates,C++11,Header Files,Anonymous Function,在此之前,我已经发布了一些关于在快速委托上使用std::function的问题,以及在集合中存储std::function以展示可添加和删除到的事件行为的方法。我还询问了在编写一整吨eventag类型的小类时的最佳实践,这个小的设计决策也被搁置了。这是一个伟大的社区 现在,撇开前言不谈,我必须准备好我的结构,现在是时候编写所有处理传入数据的处理程序了。我有一个std::map,看起来像这样: typedef std::function<void(const CommandData&
std::function
的问题,以及在集合中存储std::function
以展示可添加和删除到的事件行为的方法。我还询问了在编写一整吨eventag
类型的小类时的最佳实践,这个小的设计决策也被搁置了。这是一个伟大的社区
现在,撇开前言不谈,我必须准备好我的结构,现在是时候编写所有处理传入数据的处理程序了。我有一个std::map
,看起来像这样:
typedef std::function<void(const CommandData&)> CommandDelegate;
typedef boost::shared_ptr<CommandDelegate> CommandDelegatePtr;
typedef std::map<short, CommandDelegatePtr> CommandMap;
typedef std::function CommandDelegate;
typedef boost::shared_ptr CommandDelegatePtr;
typedef std::map命令映射;
我想增加200个处理器。我可以选择标准成员函数和lambdas
在考虑成员函数时,我首先想到的是200个声明、200个实现和一个大的源文件
与其用这些句柄污染我的类,我想“好吧,它们只是句柄,为什么不使用lambdas呢?这似乎很简单,当类被构造时,它可以将所有这些匿名函数分配给映射。完成了
然后我意识到构造器将是巨大的,我可以调用'initializeMap'帮助函数,可以想象,由于大小的原因,该函数可以放入它自己的文件中
你们觉得怎么样
.h
文件中有200个声明,.cpp文件中有200个实现(以及其他函数).h
文件中有200个声明,这是一个单独的“handlers.cpp”实现文件initializeMap
函数中分配了200个lambda提前感谢!您真的需要这些函数是动态的吗?因为如果您唯一关心的是不污染主类,那么有更好(更快)的解决方案,比如创建一个子类,或者只是将所有代码划分为多个文件 如果你的头上有200个函数,但在“永不更改”中,它不会对你的项目造成太大的膨胀,因为它就在那里。另一方面,一个膨胀的构造函数更糟糕,因为你有更高的机会在某个时候必须更改它,然后它必须重新编译所有这200个初始化 编译时间可能不会那么长,但为什么还要麻烦呢
我只想将它们与声明一起保存在主类或其他一些专用类或文件中,而不是在ctor中动态初始化它们。我的意见是,尽可能使用lambdas。它们更易于维护。例如,如果您有成员函数,则必须更新声明并定义它每次您更改它时,都要使用一个唯一的名称。Lambdas是最好的选择。如果我可以对成员变量进行自动类型推断,我将永远不会使用成员函数。我有点倾向于Lambdas。我喜欢我的主类不会有大量小处理程序的想法。所以我想不会问题是,分配它们-这就是关于类构造函数/初始值设定项函数的问题。3或4,这真的不重要,尽管我个人的偏好是更多源文件,而不是更少,因为现代编译器可以同时编译。我非常同意,但我想确定。谢谢你的回答。不确定你的意思是什么“dynamic”…数据与代码一起进入,必须调用该代码的相应处理程序,因此映射为
std::function
。如果这不是您所说的动态,您是什么意思?