C++ 调用函数时,是否可以在被调用函数的名称后附加数字或字符?
因此,我有多个函数,它们的名称相同,但每个函数的名称末尾都有一个不同的数字,如下所示:C++ 调用函数时,是否可以在被调用函数的名称后附加数字或字符?,c++,C++,因此,我有多个函数,它们的名称相同,但每个函数的名称末尾都有一个不同的数字,如下所示: void bark0() { cout << "A small amount of dogs are barking" << endl; } void bark1() { cout << "Some dogs are barking" << endl; } void bark2() { cout << "Bark Bark
void bark0() {
cout << "A small amount of dogs are barking" << endl;
}
void bark1() {
cout << "Some dogs are barking" << endl;
}
void bark2() {
cout << "Bark Bark!" << endl;
}
我知道可以使用指向函数的指针映射,但我想知道是否有一种方法可以调用这样的函数
编辑:我不想使用参数,因为函数应该做完全不同的事情。这些叫声0、1和2只是示例。您可以为函数使用一个参数,而不是这样:
void bark(int index) {
cout << "Dog " << index << " is barking" << endl;
}
请发表评论:
我想让这些函数做完全不同的事情
没有问题,您也可以使用开关或if来分开工作
void bark(int index) {
switch(index){
case 1:
// ....
break;
case 2:
// ....
break;
case 3:
// ....
break;
}
请阅读第页末的表否。不能基于运行时确定的名称调用函数。在支持反射的语言中,这样的事情是可能的,但是C++不是这样的语言。 在您的简单示例中,您可以使用数字作为函数参数,如Arash Hawaii建议的那样
这些函数应该做完全不同的事情
在这种情况下,这个论点不是一个好主意。更好的选择是使用函数指针数组。使用整数输入作为数组的索引。并确保验证输入 在C/C++中无法执行此操作,因为编译后函数名不是机器代码的一部分
我将通过创建一个函数指针数组,然后在循环中调用索引函数指针来实现这一点 您可以将函数作为functor或lambda存储在使用int作为键的散列映射中,并以这种方式在其上循环,或者使用数组而不是映射 其他答案已经解释了你说的方式是不可能的。但没有人阻止您手动执行类似操作:
using func_type = std::function<void()>;
func_type functions[3] = { &bark0, &bark1, &bark2 };
for (int i = 0; i < 3; i++) functions[i]();
函数为什么有参数?你所描述的被称为反射,而C++中不支持。我所知道的最好的工作就是你所描述的。字符串到函数指针的映射不确定为什么人们投票反对这个问题。在C++中不可能做到这一点。但是有很多语言是可能的——因此,我不认为这是一个不合理的问题。函数应该做完全不同的事情——然后相应地命名它们,而不是一些0、一些1和一些2。问一下您试图解决的实际问题,而不是问如何实现一个根本错误的解决方案,怎么样?很抱歉,我没有具体说明,我希望这些函数能做完全不同的事情,所以使用参数没有帮助。我更改了函数中的打印语句,以便更清楚地了解我想要什么。。。。这通常是最好的方法,即使在c和python中,它们都有强大的反射功能。其他答案对此解释得非常好,您发布的内容非常适合我的需要,谢谢。可能值得一提的是,在这里使用std::function而不是函数指针的优缺点。
int input;
cin >> input;
bark(input);
void bark(int index) {
switch(index){
case 1:
// ....
break;
case 2:
// ....
break;
case 3:
// ....
break;
}
using func_type = std::function<void()>;
func_type functions[3] = { &bark0, &bark1, &bark2 };
for (int i = 0; i < 3; i++) functions[i]();