定义一个函数模板实现int, char, double, string类型的加法,该如何解决
定义一个函数模板实现int, char, double, string类型的加法
其中char, string 类型的加法是将后面的字符(串)加到前一个后面
------解决思路----------------------
char, string 都返回 string就可以了
先定义一个通用模板
再偏特化,或者特化即可
------解决思路----------------------
------解决思路----------------------
有点小问题,特化char,应该结果是char,而不是string
------解决思路----------------------
那你就这样写:
------解决思路----------------------
怎么不能通过了,你编译器太老了吧
------解决思路----------------------
VS2012下没问题,10没试过
------解决思路----------------------
想把模板学精通要学STL,《STL源码剖析》《泛型编程与STL》
------解决思路----------------------
其中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;
}
------解决思路----------------------
有点小问题,特化char,应该结果是char,而不是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;
}
------解决思路----------------------
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;
}
不行,你的这个连编译都通过不了。
怎么不能通过了,你编译器太老了吧
------解决思路----------------------
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》
------解决思路----------------------
想把模板学精通要学STL,《STL源码剖析》《泛型编程与STL》![]()
你能把你的源代码发过来吗?我怎么有点不相信你的通过了,而我的却没有通过!
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;
}