如何统计C++类中的成员方法总数?
如何在C++中统计类的成员方法总数
C++本身没有原生反射机制来直接获取类的成员方法总数,不过可以借助预处理器宏或编译器扩展来实现。以下是两种可行方案:
方案一:宏定义+编译期计数器
通过自定义宏来定义方法,同时自动维护一个编译期计数器,最后加上getTotalMethod自身的计数得到总数:
#include <iostream> #define DEF_METHOD(name) \ static constexpr int method_count = method_count + 1; \ void name() {} class foo { private: static constexpr int method_count = 0; DEF_METHOD(bar) DEF_METHOD(bar2) DEF_METHOD(bar3) public: int getTotalMethod() { // 加上自身方法,总数为3+1=4 return method_count + 1; } }; int main() { foo a; std::cout << a.getTotalMethod(); // 输出4 return 0; }
方案二:利用编译器扩展__COUNTER__
__COUNTER__是主流编译器(GCC、Clang、MSVC)支持的预处理器计数器,每次遇到会自动递增。通过在每个方法前标记计数器,最后计算差值得到方法总数:
#include <iostream> #define MARK_METHOD enum { _unused_mark = __COUNTER__ }; class foo { private: enum { _start_count = __COUNTER__ }; MARK_METHOD void bar() {} MARK_METHOD void bar2() {} MARK_METHOD void bar3() {} MARK_METHOD int getTotalMethodImpl() { return __COUNTER__ - _start_count; } public: int getTotalMethod() { return getTotalMethodImpl(); } }; int main() { foo a; std::cout << a.getTotalMethod(); // 输出4 return 0; }
新增方法时,只需在方法定义前添加MARK_METHOD即可自动统计,无需手动修改计数。
内容的提问来源于stack exchange,提问作者user3416447
相关产品推荐
相关产品推荐

