c ++异构类型数组

时间:2012-07-15 06:55:11

标签: c++ metaprogramming boost-mpl

我需要在c ++中构建一个异构类型的数组。 该数组是在编译时构造的,但是,它的结构分散在不同的编译单元(即不同的源文件)上。 应该可以轻松扩展该数组以包含新类型作为应用程序进度的编程。 应在运行时访问生成的数组。

这可能吗?

我深入研究了boost mpl和boost fusion,但未找到答案。

感谢

1 个答案:

答案 0 :(得分:3)

  

数组是在编译时构造的,但是它的构造   分散在不同的编译单元

这是不可能的。翻译单位不了解其他翻译单位。由于除了TU之外什么都没有,所以不可能协调任何事情。

假设您要在foo.cpp中填充数组,添加类型为Foo的对象。它应该放在哪个指数?这是不可能确定的,因为不知道哪些其他指数存在。

链接器知道所有TU。唉,链接器仍然相当愚蠢,无法在链接时运行用户代码。如果链接器更聪明一些,它可以为您的TU执行类似myarray.push_back(Foo())的操作。但它不能。

当然,您仍然可以在运行时执行push_back

也许如果您描述真正的问题,集体就能找到解决方案。