获取一个联合体成员数量

4
有没有办法在C++中获取联合体成员的数量?例如:
union U
{
    int a;
    double b;
    char c;
};

int main()
{
    std::cout << std::union_members_count<U>::value << std::endl;  // prints 3
}

当然,std::union_members_count<>只是虚构的。
如果有方法,我该如何实现/使用它?

6
C++ 中没有这样的功能。你需要等待并希望反射提案获得通过。或者,使用外部工具,如 clang-query 和一些预处理脚本。 - nwp
我正在使用协议进行工作,其中每个消息都具有可从唯一的联合体中识别的字段,每个消息的联合体的成员数量取决于该消息所关联的联合体。不幸的是,消息的编码器基于一个固定大小的数组,其大小是模板参数。因此,我必须手动为每个消息的编码器提供联合体成员的数量作为模板参数。如果联合体中的成员数量发生变化,则必须更改编码器的模板参数值。 - hermit.crab
如果编码器数组的大小可以根据联合成员数量自动推导,那将非常方便,因为该协议有很多消息类型。不幸的是,编码器已经存在了10多年,而且没有单元测试。因此,更改编码器以使用动态数组是很危险的。 - hermit.crab
1个回答

7

不,C++不支持此功能。

C++没有反射机制,也就是不能自描述代码的特性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接