为什么我的模板函数在这个调用中不是一个有效的匹配

Why my template function is not a valid match in this call?

本文关键字:一个 有效 我的 函数 为什么 调用      更新时间:2023-10-16

我编写了以下代码将数字转换为字符串并反转在代码的注释部分,我想使函数类型为模板认为它会根据上下文获取类型"例如,如果我赋值如果是整型变量,函数将是整型的,但编译器不会发生这种情况给出错误信息

D:computer scienceprojectstringToint.cpp In function 'int main()':
49  25  D:computer scienceprojectstringToint.cpp [Error] no matching function for call to 'intstr(const char [10])'
49  25  D:computer scienceprojectstringToint.cpp [Error] candidate is:
17  21  D:computer scienceprojectstringToint.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;
}

你应该显式地为函数指定模板参数,因为编译器不能deduce T,因为函数args中没有T类型的参数。像

intstr<int>("123456789");

谢谢@ForEveR我现在减少我的代码看起来像这样,它工作得很好我希望这是将数字转换为字符串和反之亦然的最佳解决方案使用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;
}