1

我制作了以下代码以将数字转换为字符串并在代码的注释部分中反转我想让函数类型成为模板,认为它将根据上下文获取类型“例如,如果我将其分配给 int 变量,则函数将是int 类型的“但不会发生这种情况,编译器会给出错误消息

D:\computer science\project\stringToint.cpp In function 'int main()':
49  25  D:\computer science\project\stringToint.cpp [Error] no matching function for call to 'intstr(const char [10])'
49  25  D:\computer science\project\stringToint.cpp [Error] candidate is:
17  21  D:\computer science\project\stringToint.cpp template<class T> T intstr(std::string)

我认为他们在使用 stringstream 对象时是错误的,但是如果我指定函数的类型,我成功地实现了该函数的工作,但这将使我为每种类型编写不同的函数

我想念一些东西吗请帮忙

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

template<typename T> 
string strint (T oty)
{
    string ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
/*
template<typename T> 
T intstr (string oty)
{
    T ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
*/
int intstr (string oty)
{
    int ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
signed char charstr (string oty)
{
    signed char ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}
int main()
{
    int i;
    signed char c;
    string s;
    s=strint(123);
    cout<<s<<endl;
    i=intstr("123456789");
    cout<<i<<endl;
    c=charstr("2");
    cout<<c;
    return 0;
}
4

2 回答 2

5

您应该为函数显式指定模板参数,因为编译器不能T,因为函数 argsdeduce中没有类型参数。T喜欢

intstr<int>("123456789");
于 2013-05-24T08:23:23.850 回答
0

谢谢@ForEveR,我现在将我的代码简化为如下所示,并且运行良好我希望这是使用字符串流将数字转换为字符串和虎钳的最佳解决方案,非常感谢

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

template<typename T1,typename T2> 
T2 strint (T1 oty)
{
    T2 ity;
    stringstream ss;
    ss<<oty;
    ss>>ity;
    return ity;
}

int main()
{ 
    cout<< strint <string,int>("1234") <<endl;
    cout<< strint <int,string>(456) <<endl;
    cout<< strint <string,float>("3.14") <<endl;
    cout<< strint <string,char>("3") <<endl;
    return 0;
}
于 2013-05-24T09:07:39.973 回答