c++ template(4)基本技巧
来源:互联网 发布:如何卸载mac的app 编辑:程序博客网 时间:2024/05/16 08:02
1.关键字typename
这里内部的的typename指示T::const_iterator是一个类型,而不是一个静态成员.
#include <iostream>// print elements of an STL containertemplate <typename T>void printcoll (T const& coll){ typename T::const_iterator pos; // iterator to iterate over coll typename T::const_iterator end(coll.end()); // end position for (pos=coll.begin(); pos!=end; ++pos) { std::cout << *pos << ' '; } std::cout << std::endl;}
2.使用this->
模板类继承后无法直接调用基类成员,需要使用this->修饰符来访问基类成员
template <typename T>class Base{public: void exit();};template <typename T>class Derive:public Base<T>{public: void foo() { this->exit(); //or Base<T>::exit(); }};
3.模板赋值操作
默认情况下,相同类型的参数可以互相赋值,不同参数无法直接赋值.如下
Stack<int> intStack1,intStack2; // stack of ints Stack<float> floatStack; // stack of floats intStack1=intStack2;//ok floatStack=intStack1;//error
重写=操作符
// assign stack of elements of type T2template <typename T2>Stack<T>& operator= (Stack<T2> const&);
实现
template <typename T> template <typename T2>Stack<T>& Stack<T>::operator= (Stack<T2> const& op2){ if ((void*)this == (void*)&op2) { // assignment to itself? return *this; } Stack<T2> tmp(op2); // create a copy of the assigned stack elems.clear(); // remove existing elements while (!tmp.empty()) { // copy all elements elems.push_front(tmp.top()); tmp.pop(); } return *this;}
当然以上应用也可以使用局部特化
template <typename T, typename CONT = std::deque<T> >class Stack { private: CONT elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return elems.empty(); } // assign stack of elements of type T2 template <typename T2, typename CONT2> Stack<T,CONT>& operator= (Stack<T2,CONT2> const&);};
4.双重模板参数
模板参数也可以是一个模板类型
template <typename T, template <typename ELEM> class CONT = std::deque >class Stack { private: CONT<T> elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return elems.empty(); }};
5.模板参数初始化
template <typename T, template <typename ELEM> class CONT = std::deque >class Stack { private: CONT<T> elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const { // return whether the stack is empty return elems.empty(); }};
看起来似乎有点晕
6.模板参数值初始化
(1)函数
template <typename T>void foo(){ //only declare T x; //initialize T x=T();}
(2)类模板函数
template <typename T>class MyClass{private: T x;public: MyClass():x() {}};
0 0
- c++ template(4) 基本技巧
- c++ template(4)基本技巧
- C++template
- C template
- C++Template
- C++基本语法-----template
- go template基本使用
- C++ template高阶技巧(4)---《C++ Templates》
- [C#] C#的四个基本技巧
- list c++template
- Queue-C++template
- Stack-c++template
- C++Template之Priority_queue
- [C++] Template练习
- eclipse-c-template
- eclipse-c-template
- C++template ;模板学习
- list c++template
- listView的点击事件失效处理、和其属性
- json格式
- 【C#、SQL】学习与错误记录(一)
- HDOJ-最大子矩阵(二维dp)
- imregionalmax
- c++ template(4)基本技巧
- 蓝桥杯+进制转换+STL stack的使用
- c++ template笔记(3)非类型模板参数nontype template parameters
- win7+Cygwin+Eclipse搭建Hadoop开发环境
- jenkins配置邮件报错:501 mail from address must be same as authorization user
- 进程线程及堆栈关系的总结
- 通过GET方式传递 数据到服务器
- c++ template笔记(2)模板类
- 深度学习介绍(三)LeNet