我需要在c ++中构建一个异构类型的数组。 该数组是在编译时构造的,但是,它的结构分散在不同的编译单元(即不同的源文件)上。 应该可以轻松扩展该数组以包含新类型作为应用程序进度的编程。 应在运行时访问生成的数组。
这可能吗?
我深入研究了boost mpl和boost fusion,但未找到答案。
感谢
答案 0 :(得分:3)
数组是在编译时构造的,但是它的构造 分散在不同的编译单元
这是不可能的。翻译单位不了解其他翻译单位。由于除了TU之外什么都没有,所以不可能协调任何事情。
假设您要在foo.cpp
中填充数组,添加类型为Foo
的对象。它应该放在哪个指数?这是不可能确定的,因为不知道哪些其他指数存在。
链接器知道所有TU。唉,链接器仍然相当愚蠢,无法在链接时运行用户代码。如果链接器更聪明一些,它可以为您的TU执行类似myarray.push_back(Foo())
的操作。但它不能。
当然,您仍然可以在运行时执行push_back
。
也许如果您描述真正的问题,集体就能找到解决方案。