是否有任何主流编译器可能在不久的将来支持C++ 0x无限制的工会?

Ste*_*314 7 c++ c++11

我一直在寻找,但似乎编译器开发人员对支持这些没有兴趣.

对我来说,这看起来很奇怪 - 基本上,目前的C++对工会有一些限制,这些工会总是令人不快,而且永远不合适.您认为基本上删除一些错误检查将是一个相对简单的方法来勾选额外的c ++ 0x支持框,但AFAICT没有编译器开发人员已经这样做了.

为什么我感兴趣是因为它为数据结构编码中反复出现的问题提供了一个简单的解决方案 - 如何为某个未知(模板参数)类型的实例保留内存,最好在这种情况下尽可能多地保证类型安全,但是不调用恰好在该类型上定义的任何构造函数.非常重要的一点是必须遵循对齐规则.

一个不受限制的联合是完美的 - 它给你一种没有构造函数或析构函数的类型,但它具有正确的大小和对齐以允许任何成员.当然有需要在需要时显式构造和销毁的方法,当您需要类型安全访问时,您只需使用适当的union成员来访问它.对"正确"工会的支持也很有用,但即使对于单一成员工会,您也可以获得巨大的利益,例如...

union Memory_For_Item_t
{
  Item_t  m_Item;
};
Run Code Online (Sandbox Code Playgroud)

即使使用C++ 0x中的标准化对齐处理功能,这种方法也可以获得方便性和安全性,例如,您需要节点中x项的空间,而不是所有这些项都可以随时使用(或构建).如果没有C++ 0x,我们仍处于黑暗时代的WRT对齐问题 - 每个编译器都以自己的非标准方式进行.

无限制工会的唯一问题 - 我找不到对他们的支持.

Jos*_*che 4

不远的将来?我不会指望它。正如http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport所阐述的那样,尽管许多 C++0x 功能正在实现,但当前的编译器都不支持它。

然而,正如 N2544 所解释的:

当前针对联合限制的解决方法是使用模板编程或强制类型转换来创建假联合。

所以,你所描述的情况可能已经有了解决方案,尽管有点混乱。