模板基础用法

1、函数模板

1.1、template<typename  T>

T max(T a, T b)

{

return a < b ? b :a;

}

用法int iMax = max(1, 3);

1,3能够自动匹配到int上

也可以强制指定类型

int iMax = max<int>(1,2, 3,1);

虽然1.2应该匹配到float上,但是T指定了int,max中的T也会被实例化为int类型


1.2、函数模板的重载

template <typename  T>

T max(T a, T b, T c)

{

return ::max(::max(a, b), c);

}

1.3 如果标准库也有max,如何让编译器调用模板的呢?

max<>(1,3)这样表示调用模板里面的函数


2、类模板

2.1      template<typename T1, typename T2>

class Stack
{
public:
    void Push(const T&);
private:
    vector<T> vsElems;

}


函数定义方式

template<typename  T>

void Stack<T>::Push(const T& elem)

{

    vsElems.push_back(elem);

}

2.2       类模板的特例化

            template<>

            class Stack<int, int>

       {

        特例化接口实现,当T类型为int时会到这个接口中。。。

   }

2.3    局部特例化

teplate<typename T>

class Stack<T, T>

{

当两个类型相同时的特例化

}

template<typename T>

  class Stack<T, int>

{

// 当第二个类型为int时的特例化

}

2.4 缺省模板实参(函数模板不能设置缺省模板参数)

  template<typename T1, typename T2 = int>

class Stack

{}

2.5 非类型的模板参数,即模板参数不是int,class这种类型

template<typename T1, int iMax = 10>

class Stack

{

// 可以将iMax当做常数来使用

private:

T1  iArray[iMax];

}

使用Stack<int, 20>,指定iMax为20

2.5 模板参数可以依赖于模板参数

template<typename T1, typename T2 = vector<T1> >


3、技巧性基础知识

3.1 访问模板参数里面的类型时,前面要加typename

template<typename T>

class MyClass

{

public:

typename T::subType *  ptr; // subType为T里面的一个类型,不是成员变量哦,比如vector<int>中的iterator这种

}

3.2 成员模板

template<typename T>

class MyClass

{

public:

template<typename T2>

MyClass<T>& operator = (MyClass<T2> const&);

}

3.3 模板的模板参数

template<typename T1, template<typename T2> class CONT>


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值