C++ 模板配置参数VS包含文件
我有一个巨大的框架,目前是用configC++ 模板配置参数VS包含文件,c++,templates,configuration,C++,Templates,Configuration,我有一个巨大的框架,目前是用configstructs实现的,它通过一个模板参数传递给类: 例如,配置结构如下所示: struct AConfig{ struct A{ typedef Data DataType; ... lots of typedefs and other config structs ... }; struct B{ ... lots of typedefs and other config structs ... }; ... } 这些
structs
实现的,它通过一个模板参数传递给类:
例如,配置结构如下所示:
struct AConfig{
struct A{
typedef Data DataType;
... lots of typedefs and other config structs ...
};
struct B{ ... lots of typedefs and other config structs ... };
...
}
这些层次结构包含相关类的typedef,这些类应该在框架中的任何地方使用
然后,我将这些配置注入框架中任何地方的类中,例如在文件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...
}
#包括“Manager.hpp”
模板
甲级{
//宏,用于扩展AConfig结构HIRACHY
//对数据类型类进行操作的实现
数据类型a;
a、 doIt();//等等。。。
}
这种设计最酷的地方是:
struct AConfig{
struct A{
typedef Data DataType;
... lots of typedefs and other config structs ...
};
struct B{ ... lots of typedefs and other config structs ... };
...
}
- 通过使用一个单个模板参数,我可以防止如果不使用这些分层配置结构,我的模板声明会变得很长
- 我可以很容易地更改配置结构中的typedef,以便在我的框架中使用其他类实现,这些定义只是被注入到所有的类中
- 如果我只在
中包含Manager.hpp
文件(在最合适的地方(假设)),那么我不需要再次将其包含在Data.hpp
中,因为编译器会根据模板解决此问题如果我在A.hpp
中有另一个数据类的实现,这将非常方便。因此,如果我在另一个项目中使用相同的文件,它应该使用新的类Data2.hpp
文件。我只改变了配置结构和框架中的单个包含李>Data2.hpp
- 一个缺点是编译时间非常长,因为编译器必须解析所有这些依赖的类型名等等
TypeDefs.hpp
(它目前包含我的分层TypeDefs),它定义了我的整个框架,在哪些类中使用了哪些对象,等等。
我想摆脱我所有的模板类,比如“A”,因为我认为这是个糟糕的做法?。我希望能够对typedef头文件进行更改,并且我不希望更改源文件中的#include
语句,我希望我更改的唯一文件是typedef文件(例如,用另一个替换类数据)
我应该如何以最好的方式做到这一点
-
-
搜索“双重分派”,增强任何变体的“访客模式”。很有趣的答案,但我不知道这是否有助于进一步=),还不知道如何应用它。实际上,我使用AConfig结构只是为了分层收集框架的“typedef”(这些结构中没有逻辑)