C++ 让函数接受同一变量的不同类型?

C++ 让函数接受同一变量的不同类型?,c++,C++,我必须让函数为其声明的第一个和第二个变量接受string或int: char safe_at(int position, string s){ // example when the first is int and the second is string if (position < s.length()){ return s[position]; } else { return ' '; } } char safe_

我必须让函数为其声明的第一个和第二个变量接受string或int:

char safe_at(int position, string s){ // example when the first is int and the second is string
    if (position < s.length()){

        return s[position];
    }
    else {
        return ' ';
    }
}

char safe_at(string s, int position){ // example when the first is string and the second is int
    if (position < s.length()){

        return s[position];
    }
    else {
        return ' ';
    }
}
char safe_at(int位置,字符串s){//第一个是int,第二个是string时的示例
如果(位置
我不确定你能不能像我描述的那样做。
我的作业要求我只使用一个函数,这让我很困惑。

如果你来自Python,你有很多关于类型安全的知识需要学习(或者忘记动态类型,取决于你如何看待它;)。函数只能接受固定类型的参数。但是,您可以重载函数:

假设您有:

简而言之,要调用的函数由提供的参数类型决定,我们可以重用实现。然后

 std::string f{"foo"};
 int x = 42;
 auto c = safe_at(f,x);
 c = safe_at(x,f);
..第一个调用将解析为调用
safe\u at(std::string,int)
,第二个调用
safe\u at(int,std::string)

PS实际上,您的代码很好,但您当然希望避免代码重复

PPS

我的作业要求我只使用一个函数,这让我很困惑

一定有一个小小的误解,因为它可以用一个函数来完成,但对于这种情况来说,这并不是微不足道的,当然也不过分。通俗地说,当谈论“函数”时,实际上考虑了一个完整的重载集。甚至
std::string::length
实际上也是两个函数。它具有常量和非常量重载(请参阅)

购买力平价我想这是交给你的任务。不清楚为什么要编写函数以便可以交换参数顺序。具有多个参数的函数可能会引起混淆和错误。考虑

void foo(int x,char z);
然后,以下两种调用它的方法都将编译

int x = 42;
char y = 0;
foo(x,y);
foo(y,x);

以错误的顺序写入参数可能会发生错误。编写一个允许交换参数的函数并不能真正帮助实现这一点,反而会增加混乱。在我看来,你的目标是相当值得怀疑的

“第一个和第二个变量的字符串或int”?请澄清
int
没有
length
成员函数,因此将
int
作为第二个参数传递将不起作用,这意味着“position”可以是string或int,对于“s”也是如此。我已经习惯python了,如果我没有使用正确的术语,那么很抱歉。即使在python中,这也毫无意义!如果您的函数是以代码对不同类型有用的方式编写的,这是可以的,但是如果position本身是字符串,那么s[position]是什么呢?这个问题没有任何意义。我们可以通过变量或通过生成两个函数来生成接受字符串或int的函数。或者一个函数可以同时接受两个变量。它可以类似于一个函数,通过对要处理的变量进行某种逻辑处理来接受单个变量。不能使接受两个变量的函数实际上只接受一个变量。你最好弄清楚实际的问题是什么。请解释你希望函数对你想要传递的参数组合做什么。这并不明显。谢谢,这正是我所要寻找的。“皮克勒斯特乐于助人,如果你认为这是一个可以接受的答案,那么就考虑接受这个答案吧!”
void foo(int x,char z);
int x = 42;
char y = 0;
foo(x,y);
foo(y,x);