我想做的是检查类的成员变量计数,因为一些新手可能会写太多的成员变量以致无法读取。有什么办法可以得到它吗?

我们确实进行了代码审查,但是static_assert(GET_MEM_VAR_COUNT(ClassA) < 10)可能更加直接和清晰。

最佳答案

在得到反射(reflection)之前,您将不得不使用另一种工具来检查类中的成员数量。

我们现在有一些粗略的方法来获得反射(reflection),但有很多限制。如果只有数据结构,则可以使用Boost Fusion定义类,以便可以声明其大小,例如:

#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

关于c++ - 有没有一种方法可以在编译时计算类的成员变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59374827/

10-09 06:04