【发布时间】:2013-09-09 15:29:10
【问题描述】:
我正在尝试使用 c++ 模板元编程来实现以下目标。我希望建立一个类型列表,然后将这些类型收集在一起,并对列表进行进一步的编译时处理。比如:
foo.h:
class Foo { ... };
// INSERT ANY CODE HERE
bar.h:
class Bar { ... };
// INSERT ANY CODE HERE
main.h:
#include "foo.h"
#include "bar.h"
struct list_of_types {
typedef /* INSERT ANY CODE HERE */ type;
};
只要 list_of_types::type 解析为包含 Foo 和 Bar 类型的列表的某种表示形式(例如 boost::mpl::vector),我就可以将任何代码插入到上面的插槽中。以下限制适用:
foo.h 中的代码不应该知道 bar.h 中的代码,反之亦然。应该可以更改 main.h 中#include 指令的顺序而不更改任何其他代码。
如果我包含向列表添加更多类型的更多标头,则 main.h 中的代码不必更改。
类型列表必须在编译时可用。我正计划对列表进行进一步的元编程。
【问题讨论】:
-
@Jarod42
std::tuple对此有何帮助?第 2 点是一个非常明智的要求——这使得代码可以扩展而无需更改现有代码。 -
Loki 类型列表? loki-lib.sourceforge.net/html/a00554.html
-
@AdamBurry:主要挑战是以这种方式建立列表的方法。 表示类型列表的方法有很多(例如 boost::mpl::vector 或您提到的可能性),但这不是核心问题。
-
在我看来,您需要在标头中使用代码来将类型注册到类型列表中。
标签: c++ template-meta-programming