假设我有这个
#include "boost/hana.hpp"
union Thing {
BOOST_HANA_DEFINE_STRUCT(Thing,
(long, m1),
(int, m2)
);
};
目前可以使用,但是是否有什么可以保证它始终可以使用(将来的某些更改不会使它不起作用)?
答案 0 :(得分:1)
文档声称支持使用宏来定义“用户定义类型” here中的成员,并且自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);
}