【问题标题】:Template Config parameter VS include Files模板配置参数 VS 包含文件
【发布时间】:2013-12-02 03:51:52
【问题描述】:

我有一个巨大的框架,目前使用配置structs 实现,通过单个模板参数传递给类:

配置结构如下所示:

struct AConfig{
  struct A{ 
   typedef Data DataType;
   ... lots of typedefs and other config structs ... 

  };
  struct B{ ... lots of typedefs and other config structs ... };
  ...
}

这些层次结构包含相关类的类型定义,应该在框架中的任何地方使用。

然后我将这些配置注入到框架中各处的类中,例如在文件A.hpp 中:

#include "Manager.hpp"
template<typename AConfig>
class A{

   //Macro which expands the AConfig  struct hirarchy

   // Implementation which does manipulation on DataType classes
   DataType a;
   a.doIt(); //and so on... 

}

这个设计很酷的地方如下:

  • 通过使用一个 single 模板参数,如果我不使用这些分层配置结构,我可以防止我的模板声明变得很长。
  • 我可以非常轻松地更改配置结构中的 typedef 以在我的框架中使用其他类实现,这些定义只是被注入到任何地方的类中。
  • 如果我Manager.hpp 中包含例如Data.hpp 文件(这可能是最合适的(假设)),那么我不需要再次将其重新包含在A.hpp 中,因为编译器通过模板解决了这个问题..(?)如果我在Data2.hpp 中有另一个 Data 类的实现,这将很方便。因此,如果我将相同的文件用于另一个应该使用新类 Data2.hpp 文件的项目。我只更改 Config 结构和框架中的单个包含...
  • 一个缺点是编译时间非常长,因为编译器必须解析所有这些依赖的类型名等等......

我真的不确定,如果这种设计方法是一个不错的选择。我想要的是有一些文件TypeDefs.hpp(当前包含我的分层类型定义),它定义了我的整个框架,哪些对象用于哪些类等等。 我想摆脱我所有的模板类,比如“A”,因为我认为这是不好的做法?我希望能够更改 typedef 头文件并且我不想更改源文件中的 #include 语句,我希望我更改的唯一文件是 typedef 文件(例如替换类 Data和另一个)

我应该如何以最好的方式做到这一点?

    -

【问题讨论】:

    标签: c++ templates configuration


    【解决方案1】:

    您似乎正在实现访问者模式的简化版本。您的 AConfig 结构是在访问的框架类上执行逻辑的访问者。而且您的方法绝对不是一个坏习惯:您承认它可以节省您的工作量。对了! 您的访问者访问分离可以改进,这在下面的链接和指针中。该模式似乎适用,因为您有一个大型的现有类框架,您希望不知道访问者可以对其执行的新操作,它们只是提供对其数据/计算的访问。

    查看When should I use the Visitor Design Pattern?

    也许http://rgomes-info.blogspot.co.uk/2013/01/a-better-implementation-of-visitor.html

    搜索“双重调度”,提升任何变体“访客模式”。

    【讨论】:

    • 好有趣的答案,但我不知道这是否有助于进一步 =),还没有看到如何应用。我实际上只使用 AConfig 结构来分层收集框架的“typedef”(这些结构中没有逻辑)
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2021-05-23
    • 2016-01-30
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多