有没有办法在编译时计算 class 的成员变量?
Is there a way to count member variable of a class in compile time?
我想做的是检查一个class的成员变量个数,因为有些新手可能会写太多成员变量来读取。有什么办法可以得到吗?
我们确实进行了代码审查,但 static_assert(GET_MEM_VAR_COUNT(ClassA) < 10)
可能更直接、更清晰。
在我们得到反映之前,您无法使用另一个工具来检查 class 中的成员数量。
我们现在有一些粗略的方法来获取反射,但有很多限制。如果你只有一个数据结构,那么你可以使用 Boost Fusion 来定义你的 class 这样你就可以断言它的大小,例如:
#include <string>
#include <boost/fusion/include/define_struct.hpp>
#include "boost/mpl/size.hpp"
BOOST_FUSION_DEFINE_STRUCT(
(my_namespace), my_class,
(std::string, member1)
(int, member2)
(int, member3)
(double, member4)
//Uncomment me to trigger assert (double, member5)
)
static_assert(boost::mpl::size<my_namespace::my_class>::type::value < 5, "Classes must have fewer than 5 members");
Demo
我想做的是检查一个class的成员变量个数,因为有些新手可能会写太多成员变量来读取。有什么办法可以得到吗?
我们确实进行了代码审查,但 static_assert(GET_MEM_VAR_COUNT(ClassA) < 10)
可能更直接、更清晰。
在我们得到反映之前,您无法使用另一个工具来检查 class 中的成员数量。
我们现在有一些粗略的方法来获取反射,但有很多限制。如果你只有一个数据结构,那么你可以使用 Boost Fusion 来定义你的 class 这样你就可以断言它的大小,例如:
#include <string>
#include <boost/fusion/include/define_struct.hpp>
#include "boost/mpl/size.hpp"
BOOST_FUSION_DEFINE_STRUCT(
(my_namespace), my_class,
(std::string, member1)
(int, member2)
(int, member3)
(double, member4)
//Uncomment me to trigger assert (double, member5)
)
static_assert(boost::mpl::size<my_namespace::my_class>::type::value < 5, "Classes must have fewer than 5 members");