c++ - 如何创建一组无界的不同命名方法,匹配一些可以在 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;
}
由于x
inget_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++ 中做到这一点。:)
解决方案
你可以只写一个函数,它接受一个参数并计算结果:
static int getX(int input){
return input;
}
在您的情况下,您只是返回一个似乎与函数名称匹配的数字,但 get 部分除外。您可以通过仅使用一个函数并在函数体内计算答案来执行类似的操作,使用输入参数来确定输出结果应该是什么。
这样您就不必生成大量不必要的函数,这些函数根本无法维护且编译缓慢。
编辑:另一个例子:
static int getX(int input){
return input + 1;
}
关键是,您只需一个方法,并使用“名称”或参数中的传递来计算如何获得所需的结果,而不是创建许多不同命名的方法。
推荐阅读
- firebase - Firebase 云消息传递令牌停止工作 - 404 NOT FOUND
- c++ - QPolarChart 隐藏径向刻度标签
- asp.net - 从 ASP.Net Razor 页面中的 .cshtml 页面链接到存储过程结果集
- java - 如何使用装饰器 DP 将 addDough 方法写入我的披萨
- git - Gitlab/Bitbucket - 在特定项目中阻止管理员访问
- java - MySQL:EOFException:无法从服务器读取响应。预期读取 4 个字节,在连接意外丢失之前读取 0 个字节
- javascript - 如何改变模态内容(没有引导程序)
- python - 根据项目符号展开一行
- html - 是什么导致使用不同大小的背景图像产生如此不同的结果?
- c - 如何在keil中使用GNU原子内存访问函数