c++ - 是否保证 union 与 boost::hana::Structure 一起工作?

标签 c++ c++14 unions boost-hana

假设我有这个:

#include "boost/hana.hpp"


union Thing {
    BOOST_HANA_DEFINE_STRUCT(Thing,
        (long, m1),
        (int, m2)
    );
};

这目前有效,但是否有任何东西可以保证它始终有效( future 的某些更改不会使其无效)?

最佳答案

文档声称支持使用宏定义“用户定义类型”中的成员 here , 自从 union is technically a type of class ,我可以肯定地说它是受支持的。

这并不是说它将始终受到支持,但更改它会是一个重大更改,并且可能需要一个新的主要版本,即 Boost.Hana 2.0。

关于 Struct 还有一些其他的事情可以修复概念的关联接口(interface),但我认为这不会影响此用例。

如果你想从作者那里得到权威的答案,也许 Github 上的一个问题是可行的。

综上所述,请记住 Struct 改进了 ComparableFoldable,它们按顺序对成员进行操作,这会有点对于 union 成员来说很奇怪。

这是个绝妙的主意,我很想知道可以用它做什么。

我扩展了你的例子:

#define BOOST_HANA_CONFIG_ENABLE_STRING_UDL
#include "boost/hana.hpp"

namespace hana = boost::hana;
using namespace boost::hana::literals;


union Thing {
    BOOST_HANA_DEFINE_STRUCT(Thing,
        (long, m1),
        (int, m2)
    );
};

int main()
{
  Thing thing{};
  hana::at_key(thing, "m2"_s) = 42;

  BOOST_HANA_RUNTIME_CHECK(thing.m2 == 42);
}

关于c++ - 是否保证 union 与 boost::hana::Structure 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51876437/

相关文章:

c - 使用字符数组作为长整型数组

c++ - 观看变量时 Visual Studio 2005 崩溃

c++ - 为什么有些函数分布密集,而另一些函数则用 int 3 指令对齐和填充?

c++ - 这个编译器错误是什么意思 - C++ 中的 "qualified-id in declaration before ‘=’ token ?

c++ - 宏是强制内联的唯一方法吗

c - union 和结构初始化

c++ - 在函数顶部声明的变量和后面声明的变量之间的区别

c++ - 如何替换以下(已弃用)OpenGL 函数?

c++ - 下面的代码有什么问题。我收到运行时错误

作为 union 成员的类型可以为该 union 起别名吗?