2012-07-15 133 views
1

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

这可能吗?

我钻了一点点进入boost mpl和boost融合,但没有找到答案。

感谢

+0

如果你已经在使用Boost,为什么不'std :: vector '? – kennytm 2012-07-15 06:57:25

+1

若要将不同类型放在数组中,如果它们具有公共基类,请将unique_ptr用于基类。否则,把它们放在一个数组中是没有意义的。你会想要一个结构或元组。 – 2012-07-15 07:00:54

回答

3

阵列是在编译时构造,然而,它的结构 分散在不同的编译单元

这是不可能的。翻译单位不知道其他翻译单位。由于除TU之外没有任何东西可以协调任何事情。

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

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

当然你仍然可以在运行时做push_back

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