很多函数还是很多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”实现文件
  • 没有声明,在ctor中分配了200个lambda
  • 没有声明,在它自己的文件中的
    initializeMap
    函数中分配了200个lambda

  • 提前感谢!

    您真的需要这些函数是动态的吗?因为如果您唯一关心的是不污染主类,那么有更好(更快)的解决方案,比如创建一个子类,或者只是将所有代码划分为多个文件

    如果你的头上有200个函数,但在“永不更改”中,它不会对你的项目造成太大的膨胀,因为它就在那里。另一方面,一个膨胀的构造函数更糟糕,因为你有更高的机会在某个时候必须更改它,然后它必须重新编译所有这200个初始化

    编译时间可能不会那么长,但为什么还要麻烦呢


    我只想将它们与声明一起保存在主类或其他一些专用类或文件中,而不是在ctor中动态初始化它们。

    我的意见是,尽可能使用lambdas。它们更易于维护。例如,如果您有成员函数,则必须更新声明并定义它每次您更改它时,都要使用一个唯一的名称。Lambdas是最好的选择。如果我可以对成员变量进行自动类型推断,我将永远不会使用成员函数。

    我有点倾向于Lambdas。我喜欢我的主类不会有大量小处理程序的想法。所以我想不会问题是,分配它们-这就是关于类构造函数/初始值设定项函数的问题。3或4,这真的不重要,尽管我个人的偏好是更多源文件,而不是更少,因为现代编译器可以同时编译。我非常同意,但我想确定。谢谢你的回答。不确定你的意思是什么“dynamic”…数据与代码一起进入,必须调用该代码的相应处理程序,因此映射为
    std::function
    。如果这不是您所说的动态,您是什么意思?