具有不同返回类型的函数重载

Abr*_*rar 2 c++ overloading function c++11

我知道我们不允许仅基于返回类型重载函数.假设我有两个函数double convert(string num)int convert(string num) 考虑以下示例代码:

double convert(string num){
    stringstream ss;
    double d_num;
    ss<<num;
    ss>>d_num;
    return d_num;
}

int convert(string num){
    int i_num;
    /*.....
   same as previous
   .....
   */
   return i_num;
}
Run Code Online (Sandbox Code Playgroud)

在main()中:

int main(){
    string st="09122321";
    double d1=convert(st);
    int i1=convert(st);

}
Run Code Online (Sandbox Code Playgroud)

虽然我重载函数只在返回类型上有所不同但是因为我根据它们的返回类型将它们分配给数据类型不是我应该得到转换string num后的double d1int i1

现在我得到的错误类似于:

错误:新声明'int convert(std :: string)'| 错误:模糊旧声明'double convert(std :: string)'|

convert()如果我希望通过重载函数让它具有不同的返回类型,我将如何完成工作?

R S*_*ahu 6

如果我希望它通过重载函数让它具有不同的返回类型,我将如何使convert()工作?

您可以创建一个简单的功能模板.

template <typename T>
T convert(std::string const& num){
    std::istringstream ss(num);
    T d_num;
    ss>>d_num;
    return d_num;
}
Run Code Online (Sandbox Code Playgroud)

并将其专门化,std::string以便输入参数用于复制构造返回的std::string.

template <>
std::string convert<std::string>(std::string const& in){
    return in;
}
Run Code Online (Sandbox Code Playgroud)

并将其用作:

auto d1 = convert<double>(st);
auto i1 = convert<int>(st);
Run Code Online (Sandbox Code Playgroud)