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]();