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

如何遍历C++命名空间内所有函数以获取有效strategyType枚举值

解决方案

由于命名空间allFunctionStrategy中的函数参数列表各异,但strategyContext类已持有所有调用这些函数所需的参数,我们可以通过统一调用接口的方式实现遍历逻辑,具体步骤如下:

核心思路

将每个策略函数包装为无参可调用对象(利用lambda捕获类成员变量),存入容器后逐个调用,直到找到第一个返回非InvalidStrategy的结果。

代码实现

修改strategyContext类,添加遍历逻辑的成员函数:

#include <vector>
#include <functional>
#include <string>

enum class strategyType
{
    Strategy1,
    Strategy2,
    Strategy3,
    Strategy4,
    Strategy5,
    InvalidStrategy
};

namespace allFunctionStrategy
{
   strategyType algorithmMl(int v1,int v2);
   strategyType algorithmHeuristic(int v3,std::string s1);
   strategyType algorithmHeuristic(std::string s1,std::string s2);
   // 其他策略函数声明
}

class strategyContext
{
    int v1,v2,v3;
    std::string s1,s2;
    // 预存所有包装后的策略函数(提升重复调用效率)
    std::vector<std::function<strategyType()>> strategyFuncs;

public:
    // 构造函数:初始化成员变量并预包装策略函数
    strategyContext(int v1_, int v2_, int v3_, std::string s1_, std::string s2_)
        : v1(v1_), v2(v2_), v3(v3_), s1(s1_), s2(s2_)
    {
        // 将每个策略函数绑定为无参调用
        strategyFuncs = {
            [this]() { return allFunctionStrategy::algorithmMl(v1, v2); },
            [this]() { return allFunctionStrategy::algorithmHeuristic(v3, s1); },
            [this]() { return allFunctionStrategy::algorithmHeuristic(s1, s2); }
            // 新增策略函数时,直接在此添加对应的lambda即可
        };
    }

    // 遍历策略函数,返回第一个有效结果
    strategyType getValidStrategy()
    {
        for (const auto& func : strategyFuncs)
        {
            strategyType result = func();
            if (result != strategyType::InvalidStrategy)
            {
                return result;
            }
        }
        // 所有函数均返回无效值时,返回默认无效枚举
        return strategyType::InvalidStrategy;
    }
};

关键细节说明

  • 统一接口:借助std::function<strategyType()>消除不同策略函数的参数差异,lambda表达式捕获当前类的成员变量,完成参数绑定。
  • 扩展性:新增策略函数时,仅需在strategyFuncs的初始化列表中添加对应lambda,无需修改遍历逻辑。
  • 效率优化:将策略函数容器设为类成员变量,在构造函数中初始化,避免每次调用getValidStrategy时重复创建容器。

内容的提问来源于stack exchange,提问作者nutNCracker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:06:30