定义一个函数模板实现int, char, double, string类型的加法,该如何解决

定义一个函数模板实现int, char, double, string类型的加法
其中char, string 类型的加法是将后面的字符(串)加到前一个后面
------解决思路----------------------
char, string 都返回 string就可以了
先定义一个通用模板
再偏特化,或者特化即可
------解决思路----------------------
template <typename T1, typename T2>
auto Add(T1 x, T2 y)
{
    return x + y;
}

template <>
auto Add<char, char>(char x, char y)
{
    return std::string("") + x + y;
}

------解决思路----------------------
引用:
template <typename T1, typename T2>
auto Add(T1 x, T2 y)
{
    return x + y;
}

template <>
auto Add<char, char>(char x, char y)
{
    return std::string("") + x + y;
}

有点小问题,特化char,应该结果是char,而不是string
------解决思路----------------------
引用:
Quote: 引用:
Quote: 引用:

Quote: 引用:
Quote: 引用:

Quote: 引用:

template <typename T1, typename T2>
auto Add(T1 x, T2 y)
{
    return x + y;
}

template <>
auto Add<char, char>(char x, char y)
{
    return std::string("") + x + y;
}

有点小问题,特化char,应该结果是char,而不是string

按楼主的要求就是string啊,另外两个char相加应该是int

char类型的两个变量相加是一个字符串。
e.g    char a = 'a', b='b'.  那么应该返回"ab".


那你想把"ab"存哪?
动态分配一个char*指针来存?

可以啊!就是用函数模板实现


那你就这样写:

template <typename Tout, typename Tin>
Tout Add(Tin x, Tin y)
{
    return x + y;
}
 
template <>
char* Add<char*, char>(char x, char y)
{
char* p = new char[2];
p[0] = x;
p[1] = y;
    return p;
}

------解决思路----------------------
引用:
Quote: 引用:
Quote: 引用:

Quote: 引用:
Quote: 引用:

Quote: 引用:
Quote: 引用:

Quote: 引用:

template <typename T1, typename T2>
auto Add(T1 x, T2 y)
{
    return x + y;
}

template <>
auto Add<char, char>(char x, char y)
{
    return std::string("") + x + y;
}

有点小问题,特化char,应该结果是char,而不是string

按楼主的要求就是string啊,另外两个char相加应该是int

char类型的两个变量相加是一个字符串。
e.g    char a = 'a', b='b'.  那么应该返回"ab".


那你想把"ab"存哪?
动态分配一个char*指针来存?

可以啊!就是用函数模板实现


那你就这样写:

template <typename Tout, typename Tin>
Tout Add(Tin x, Tin y)
{
    return x + y;
}
 
template <>
char* Add<char*, char>(char x, char y)
{
char* p = new char[2];
p[0] = x;
p[1] = y;
    return p;
}

不行,你的这个连编译都通过不了。


怎么不能通过了,你编译器太老了吧
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:
Quote: 引用:

Quote: 引用:
Quote: 引用:

Quote: 引用:
Quote: 引用:

Quote: 引用:

template <typename T1, typename T2>
auto Add(T1 x, T2 y)
{
    return x + y;
}

template <>
auto Add<char, char>(char x, char y)
{
    return std::string("") + x + y;
}

有点小问题,特化char,应该结果是char,而不是string

按楼主的要求就是string啊,另外两个char相加应该是int

char类型的两个变量相加是一个字符串。
e.g    char a = 'a', b='b'.  那么应该返回"ab".


那你想把"ab"存哪?
动态分配一个char*指针来存?

可以啊!就是用函数模板实现


那你就这样写:

template <typename Tout, typename Tin>
Tout Add(Tin x, Tin y)
{
    return x + y;
}
 
template <>
char* Add<char*, char>(char x, char y)
{
char* p = new char[2];
p[0] = x;
p[1] = y;
    return p;
}

不行,你的这个连编译都通过不了。


怎么不能通过了,你编译器太老了吧



你的可以通过吗?你试过了吗?


VS2012下没问题,10没试过
------解决思路----------------------
想把模板学精通要学STL,《STL源码剖析》《泛型编程与STL》  定义一个函数模板实现int, char, double, string类型的加法,该如何解决
------解决思路----------------------
引用:
Quote: 引用:

想把模板学精通要学STL,《STL源码剖析》《泛型编程与STL》  定义一个函数模板实现int, char, double, string类型的加法,该如何解决


你能把你的源代码发过来吗?我怎么有点不相信你的通过了,而我的却没有通过!




template <typename Tout, typename Tin>
Tout Add(Tin x, Tin y)
{
return x + y;
}

template <>
char* Add<char*, char>(char x, char y)
{
char* p = new char[2];
p[0] = x;
p[1] = y;
return p;
}

int main()
{
cout<<Add<int, int>(1,2)<<endl;
cout <<Add<char*, char>('a', 'b')<<endl; //这个输出后面是乱码,因为不是\0结尾
getchar();
return 0;
}