【问题标题】:c++ array of heterogeneous typesc++ 异构类型数组
【发布时间】:2012-07-15 06:55:11
【问题描述】:

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

这可能吗?

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

谢谢

【问题讨论】:

  • 如果你已经在使用 Boost,为什么不std::vector<boost::any>
  • 如果不同的类型有一个共同的基类,则要将它们放入一个数组中,请对基类使用 unique_ptr。否则,将它们放在一个数组中是没有意义的。你会想要一个结构或元组。

标签: c++ metaprogramming boost-mpl


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多