我做了以下代码将数字转换为字符串和反向 在注释的代码部分我想使函数类型成为模板 认为它将根据上下文获取类型“例如,如果我指定 它到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;
}
答案 0 :(得分:5)
您应该为函数显式指定模板参数,因为编译器不能deduce
T,因为函数args中没有类型T
的参数。喜欢
intstr<int>("123456789");
答案 1 :(得分:0)
感谢@ForEveR我现在减少了我的代码看起来像这样,它运行良好 我希望这是将数字转换为字符串和vise诗句的最佳解决方案 使用stringstream 非常感谢
#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;
}