如何使此函数使用getline读取字符串并使用int执行相同的操作?

时间:2018-05-05 06:30:00

标签: c++ string templates overloading getline

template<typename T>
T get(const string &prompt)
{
    cout<<prompt;
    T ret;
    cin>>ret;
    return ret;
}

我不知道如何通过重载来做到这一点;基本上,这适用于任何类型的数据,对......

我尝试了typeid(variable).name();并得到了一个字符串变量的输出,并尝试在get函数中创建一个if。然而它没有用。

1 个答案:

答案 0 :(得分:3)

如您所知,函数不能仅由返回值类型重载。我注意到你的类型是默认构造的,因此我将它们用作具有空默认值的函数参数,因此函数可以通过此默认参数类型重载:https://ideone.com/oPSWLC

#include <string>
#include <iostream>

template<typename T>
T get(const std::string &prompt, T ret = T()) {
    std::cout << prompt;
    std::cin >> ret;
    return ret;
}

std::string get(const std::string &prompt) {
    std::cout << prompt;
    std::string ret;
    std::getline(std::cin, ret);
    return ret;
}

int main() {
    get<int>("int: ");
    get<std::string>("string: ");
}

不需要字符串返回函数的模板特化,精确匹配的重载函数优先于函数模板。