Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让这个函数用getline读取字符串,用int执行相同的操作? 模板 T get(常量字符串和提示符) { 库特; 返回ret; }_C++_String_Templates_Overloading_Getline - Fatal编程技术网

C++ 如何让这个函数用getline读取字符串,用int执行相同的操作? 模板 T get(常量字符串和提示符) { 库特; 返回ret; }

C++ 如何让这个函数用getline读取字符串,用int执行相同的操作? 模板 T get(常量字符串和提示符) { 库特; 返回ret; },c++,string,templates,overloading,getline,C++,String,Templates,Overloading,Getline,我不知道如何处理重载;基本上,这适用于任何类型的数据,对吧 我尝试了typeid(variable.name()并获取字符串变量的输出,并尝试在get函数中生成if。但是它不起作用。正如您已经知道的,函数不能仅由返回值类型重载。我注意到您的类型是默认可构造的,因此我将它们用作默认值为空的函数参数,因此可以通过此默认参数类型重载函数: #包括 #包括 模板 T get(const std::string和prompt,T ret=T()){ 标准:cout>ret; 返回ret; } std::s

我不知道如何处理重载;基本上,这适用于任何类型的数据,对吧


我尝试了
typeid(variable.name()
并获取字符串变量的输出,并尝试在get函数中生成if。但是它不起作用。

正如您已经知道的,函数不能仅由返回值类型重载。我注意到您的类型是默认可构造的,因此我将它们用作默认值为空的函数参数,因此可以通过此默认参数类型重载函数:

#包括
#包括
模板
T get(const std::string和prompt,T ret=T()){
标准:cout>ret;
返回ret;
}
std::string get(const std::string和prompt){

std::当然不能重载它,因为参数的类型和编号不应该更改。因此我的建议是,虽然指定函数不是一个好主意,但在这里,如果您想对
字符串
做一些不同的工作,您应该这样做。@Constructor“指定函数不是一个好主意”这到底是什么意思?请使用答案字段;)@user463035818好吧,其他人已经帮我做了,我懒得写答案。至于指定,我只想强调,如果一个人可以使用重载,那么他/她就不应该使用指定。@Constructor你怎么会太懒?只需在不同的领域键入相同的文本d、 我仍然不知道“指定函数”应该是什么mean@user463035818嗯,我认为一个高质量的答案应该有代码。而且我现在正在使用手机,所以我现在不想写代码。而且我的英语不好似乎是你困惑的原因?如果我仍然不能正确表达,我只想使用“specify
get
”表示抱歉!;)T ret=T()这是什么意思?第二个函数打断了我对函数的一些了解。调用字符串返回函数时,我不应该有两个参数吗?为什么要使用“template”“我已经更新了答案,避免了两个问题。嘿,你还活着吗?D?从C++中休息了一会,回来了,为什么这不能再工作了?”
template<typename T>
T get(const string &prompt)
{
    cout<<prompt;
    T ret;
    cin>>ret;
    return ret;
}
#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: ");
}