【发布时间】: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