C++中有关函数模板

设计一个交换函数的函数模板,并利用main函数中的不同类型数据验证,例如:int,double,char等。#include<iostream>#include<cstr... 设计一个交换函数的函数模板,并利用main函数中的不同类型数据验证,例如:int,double,char等。
#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
void Swap(T &a,T &b)
{
T t;
t=a;
a=b;
b=t;
}
int main( )
{
int a(3),b(4);
char str1[5]="abcd", str2[5]="hijk";
Swap(a,b);
Swap(str1,str2);
cout<<"a="<<a<<",b="<<b<<endl;
cout<<"str1="<<str1<<",str2="<<str2<<endl;
return 0;
}

我char类型的赋值要用strcpy,int double等类型的赋值要用 “=”,如何写在一个模板函数里
void Swap(T &a,T &b)
{

T t;
//strcpy(t,a);
//strcpy(a,b);
//strcpy(b,t);
t=a;
a=b;
b=t;
}
展开
 我来答
zjfaok
2015-05-23 · TA获得超过6807个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1631万
展开全部

一个技巧是利用 traits

template <typename T>
struct Copy {
static void do_copy(T& l,T& r) {
    l = r;
}
};
template <size_t N>
struct Copy<char[N}> {
static void do_copy(T& l,T& r) {
    strcpy(l,r);
}
};

template <typename T>
void Swap(T &a,T &b)
{
    T t;
    Copy<T>::do_copy(t,a);
    Copy<T>::do_copy(a,b);
    Copy<T>::do_copy(b,t);
}

好处是如果别的类也有特别的赋值方式,只需要特化 Copy 模板即可,并不需要关心 Swap 的实现(这里的实现很简单,但是可能别的时候一些函数模板的逻辑极其复杂而不容易看懂,类的作者并不能轻松确定如何改变类的实现才能使用这个函数模板)


当然这里可能是杀鸡用牛刀了……

童话OL
2015-05-23 · TA获得超过145个赞
知道答主
回答量:66
采纳率:0%
帮助的人:30.2万
展开全部
可以模板特例化
追问
请写出具体代码可以吗
我不太懂
追答
查一下特例化就明白了.当不同类型无法在一个模板中写的时候就需要特例化.
其实就是在原基础上多写一个模板的特殊情况
你的题目特例化应该是:
template
void Swap(char*a,char*b)
{
...
}
其中代码你应该了解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式