c++ 可变参数模版 & 编译期排序

本文详细介绍了C++中的可变参数模板的使用,包括函数模板和类模板的泛化、全特化及偏特化。讨论了如何获取参数个数、实现打印、求和等功能,并探讨了std::enable_if< >和std::conditional的应用。此外,还阐述了编译期的归并排序实现,从C语言版归并排序到利用模板在编译期间完成排序的策略。
摘要由CSDN通过智能技术生成

c++ 可变参数模版 & 编译期排序

. 函数模版

       关键字template和模板参数列表作为声明与定义的开始。模板参数列表中的类型,可以出现在参数、返回值以及函数体中

     定义

C++

template <类型形式参数>      //类型形式参数即此格式:<typename  形式参数>  或 <class 形式参数>

返回类型  函数名 (形式参数)

{

 //函数定义体;

}

      1. 泛化

C++

#include <iostream>

using namespace std;

//普通模板

template<class T1,class T2>

bool Compare(T1 a, T2 b)

{

 return a == b;

}

 2. 全特化

C++

//普通模板

template<class T1,class T2>

bool Compare(T1 a, T2 b)

{

 cout << "普通模板" << endl;

 return a == b;

}

//函数模板特化

template<>

bool Compare(const char* a, const char* b)

{

 cout << "函数模板特化" << endl;

 return strcmp(a,b) == 0;

}

. 类模版

      定义

C++

template <类型形式参数>

class 类名

{

 //类声明体;

};

template <类型形式参数>

返回类型 类名 <类型> :: 成员函数名1(形式参数)

{

 //成员函数定义体;

}

template <类型形式参数>

返回类型 类名 <类型> :: 函数名N(形式参数)

{

//成员函数定义体;

}

      1. 泛化

C++

template<class T>

class Compare

{

    public:

         bool equal(T a,T b);

};

template<class T>

bool Compare<T>::equal(T a, T b)

{

     return a == b;

}

C++

template<class T1,class T2>

class Test

{

public:

     Test(T1 a, T2 b):_a(a),_b(b)

     {

          cout << "模板化" << endl;

     }

private:

     T1 _a;

     T2 _b;

};

 2. 偏特化

C++

//模板偏特化

template<class T>

class Test<int,T>

{

public:

     Test(int a, T b) :_a(a), _b(b)

     {

         cout << "模板偏特化" << endl;

     }

private:

     int _a;

     T _b;

};

 3. 全特化

C++

//模板全特化

template<>

class Test<int,int>

{

public:</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值