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;
} 展开
#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;
} 展开
展开全部
一个技巧是利用 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 的实现(这里的实现很简单,但是可能别的时候一些函数模板的逻辑极其复杂而不容易看懂,类的作者并不能轻松确定如何改变类的实现才能使用这个函数模板)
当然这里可能是杀鸡用牛刀了……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询