有没有办法获取一个类的字段数量?
struct Base {
char a;
int b;
};
struct Derived : Base {
std::string c;
};
static_assert(num_fields<Base>::value == 2);
static_assert(num_fields<Derived>::value == 1);
我找到了这个问题 https://stackoverflow.com/questions/6844605但它已经过时了 - 我希望可以将一些东西与 C++14/17 缝合在一起(毕竟我们现在有类似的东西魔法获取 https://github.com/apolukhin/magic_get- 也许其中的一些子集......?)
EDIT:- 编译器挂钩也可以工作,即使它仅适用于 MSVC 或 GCC 或 Clang - 我使用所有 3 个。
事实上,Antony Polukhin 向我们展示了 C++does自 C++14 起,在不知情的情况下具有(某些)反射;并且您可以提取有关字段的信息。 ...好吧,至少对于普通的旧数据结构/类来说是这样。观看他的 CppCon 2016 演讲:
没有宏、标记或外部工具的 C++14 反射 / Antony Polukhin https://www.youtube.com/watch?v=abdeAew3gmQ
然后你使用:
template <class T>
constexpr std::size_t fields_count() noexcept;
这可以让你得到字段数。要使用它,您需要这两个文件:
https://github.com/apolukhin/magic_get/blob/develop/include/boost/pfr/detail/config.hpp https://github.com/apolukhin/magic_get/blob/develop/include/boost/pfr/detail/config.hpp
https://github.com/apolukhin/magic_get/blob/develop/include/boost/pfr/detail/fields_count.hpp https://github.com/apolukhin/magic_get/blob/develop/include/boost/pfr/detail/fields_count.hpp
这应该足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)