现在的位置: 首页 > 综合 > 正文

c++ template 函数模板

2013年12月06日 ⁄ 综合 ⁄ 共 1891字 ⁄ 字号 评论关闭

#include <string.h>   
#include <stdio.h>  

template <typename T> T compare(const T &v1,const T &v2)
{
	if(v1 < v2) return -1;
        if(v2 < v1) return 1;
        return 0;
}

int main(void)   
{
        int a = 5,b = 4;
        float x = 5.4 ,y = 6.4;
 	printf("%d\n", compare(a,b)); 
	printf("%f\n", compare(x,y)); 
	return 0;
}

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
1
-1.000000
pateo@pateo-B86N53X:~/work/study$ 

#include <string.h>   
#include <stdio.h>  

template <typename T> T compare(const T &v1,const T &v2);

int main(void)   
{
        int a = 5,b = 4;
        float x = 5.4 ,y = 6.4;
 	printf("%d\n", compare(a,b)); 
	printf("%f\n", compare(x,y)); 
	return 0;
}

template <typename T> T compare(const T &v1,const T &v2)
{
	if(v1 < v2) return -1;
        if(v2 < v1) return 1;
        return 0;
}

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
1
-1.000000
pateo@pateo-B86N53X:~/work/study$ 

#include <string.h>   
#include <stdio.h>  

template <typename T> T compare(const T &v1,const T &v2);

int compare(const int v1,const int v2)
{
	printf("compare method\n");
        return v1 + v2;
}

int main(void)   
{
        int a = 5,b = 4;
        float x = 5.4 ,y = 6.4;
 	printf("%d\n", compare(a,b)); 
	printf("%f\n", compare(x,y)); 
	return 0;
}

template <typename T> T compare(const T &v1,const T &v2)
{
	printf("template compare method\n");
	if(v1 < v2) 
        {
         return -1;
        }
        if(v2 < v1) 
       {
        return 1;
        }
        return 0;
}

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
compare method
9
template compare method
-1.000000
pateo@pateo-B86N53X:~/work/study$ 

结论:

普通函数和函数模板都完全匹配时,非模板版本优先

下面有关特化

#include <string.h>   
#include <iostream> 
using namespace std; 

template<class T>
T compare(T t1, T t2)
{
		return (t1<t2?t1:t2);
}


template<>
const char* compare<>(const char* t1,const char* t2)
{
	return(strcmp(t1,t2)<0) ?t1:t2;
}


int main(int argc, char* argv[])
{
	cout<<compare(5,2)<<endl;
	cout<<compare(0.2,0.5)<<endl;
	const char p[]="liaojianguo";
	const char q[]="liao";

	const char* r;
	r=compare(p,q);
	cout<<r<<endl;

	return 0;
}

输出:

pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
2
0.2
liao
pateo@pateo-B86N53X:~/work/study$ 

抱歉!评论已关闭.