1

我需要在 C++ 中构建一个异构类型的数组。数组是在编译时构建的,但是它的构建分散在不同的编译单元(即不同的源文件)中。随着应用程序的编程进展,该数组应该很容易扩展以包含新类型。应在运行时访问生成的数组。

那可能吗?

我对 boost mpl 和 boost fusion 进行了一些研究,但没有找到答案。

谢谢

4

1 回答 1

3

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

这是不可能的。一个翻译单元不知道其他翻译单元。由于除了 TU 之外什么都没有,因此不可能协调任何事情。

假设您要在 中填充数组foo.cpp,添加一个类型为 的对象Foo。应该放在哪个索引?无法确定,因为不知道还有哪些其他索引。

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

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

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

于 2012-07-15T07:46:48.360 回答