You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:33:11