工会是否保证与 boost::hana::Structure 合作?
Are unions guaranteed to work with boost::hana::Structure?
假设我有这个:
#include "boost/hana.hpp"
union Thing {
BOOST_HANA_DEFINE_STRUCT(Thing,
(long, m1),
(int, m2)
);
};
这目前有效,但是否有任何东西可以保证它始终有效(未来的某些更改不会使其无效)?
文档声称支持使用宏来定义 "user-defined type" here, and since a union is technically a type of class 中的成员,我敢说它是受支持的。
这并不是说它将始终受到支持,但更改它将是一个重大更改,并且可能需要一个新的主要版本,即 Boost.Hana 2.0.
关于 Struct
概念的关联接口还有一些其他问题可以修复,但我认为这不会影响此用例。
如果你想从作者那里得到一个权威的答案,也许 Github 上的问题是可行的方法。
综上所述,请记住 Struct
改进了 Comparable
和 Foldable
,它们按顺序对成员进行操作,这对于联合成员来说有点奇怪。
这是个绝妙的主意,我很想知道可以用它做什么。
我扩展了你的例子:
#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);
}
假设我有这个:
#include "boost/hana.hpp"
union Thing {
BOOST_HANA_DEFINE_STRUCT(Thing,
(long, m1),
(int, m2)
);
};
这目前有效,但是否有任何东西可以保证它始终有效(未来的某些更改不会使其无效)?
文档声称支持使用宏来定义 "user-defined type" here, and since a union is technically a type of class 中的成员,我敢说它是受支持的。
这并不是说它将始终受到支持,但更改它将是一个重大更改,并且可能需要一个新的主要版本,即 Boost.Hana 2.0.
关于 Struct
概念的关联接口还有一些其他问题可以修复,但我认为这不会影响此用例。
如果你想从作者那里得到一个权威的答案,也许 Github 上的问题是可行的方法。
综上所述,请记住 Struct
改进了 Comparable
和 Foldable
,它们按顺序对成员进行操作,这对于联合成员来说有点奇怪。
这是个绝妙的主意,我很想知道可以用它做什么。
我扩展了你的例子:
#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);
}