首页 > 解决方案 > 如何创建一组无界的不同命名方法,匹配一些可以在 C++ 中按需调用的模式?

问题描述

目前我正在从 python 转移到 C++,我想创建一组可以按需调用的无界函数:

namespace funcs1 {
    int get_1() {return 1;}
    int get_2() {return 2;}
    //...
}

//could also be

class funcs2 {
    static int get_1() {return 1;}
    static int get_2() {return 2;}
    //...
}

int main() {
   funcs1::get_123456789(); //return 123456789
   funcs2::get_123456789(); //return 123456789
   return 0;
}

由于xinget_x()可以任意大,我不能只创建无限数量的函数。在python中,可以通过以下方式完成:

class FuncsMeta(type):

    def __getattr__(_, key):
        def f():
            return int(key.split('_')[1])
        return f
    
class Funcs(metaclass=FuncsMeta):
    pass
    

assert funcs.get_123456789() == 123456789

我想知道如何在 C++ 中做到这一点。:)

标签: c++

解决方案


你可以只写一个函数,它接受一个参数并计算结果:

static int getX(int input){
    return input;
}

在您的情况下,您只是返回一个似乎与函数名称匹配的数字,但 get 部分除外。您可以通过仅使用一个函数并在函数体内计算答案来执行类似的操作,使用输入参数来确定输出结果应该是什么。

这样您就不必生成大量不必要的函数,这些函数根本无法维护且编译缓慢。

编辑:另一个例子:

static int getX(int input){
    return input + 1;
}

关键是,您只需一个方法,并使用“名称”或参数中的传递来计算如何获得所需的结果,而不是创建许多不同命名的方法。


推荐阅读