linux中stl模版的用法1
/*模版成员模版*/
#include<iostream>
using namespace std;
template<typename V>
class Value
{public:Value(const V& v):m_v(v){}V m_v;
};
template<typename K>
class Key
{
public:Key(const K& k):m_k(k){}K m_k;template<typename V>class Value{public:Value(const V& v):m_v(v){}V m_v;};};
int main()
{Key<string> key("pi");Key<string>::Value<double> value(3.1415);cout<<key.m_k<<" "<<value.m_v<<endl;return 0;
}
/*
模版型成员变量
*/
#include<iostream>
using namespace std;
template<typename V>
class Value
{
public:
Value(const V& v):m_v(v){}
V m_v;
};
template<typename K,typename V>
class Pair
{
public:
Pair(const K& k,const V& v):m_k(k),m_v(v){}
K m_k;
Value<V> m_v;
};
int main()
{
Pair<string,double> pair("PI",3.14);
cout<<pair.m_v.m_v<<" "<<pair.m_k<<endl;
return 0;
}
#include<iostream>
#include<cstring>
using namespace std;
//模板函数
template<typename T>
T max(T x,T y)
{return x>y?x:y;
}
//函数特化
template<>
const char* max(const char * x,const char * y)
{return strcmp(x,y)>0?x:y;
}
//通用模版类
template<typename T>
class Comp
{
public:Comp(T x,T y):m_x(x),m_y(y){}T min()const{return m_x<m_y?m_x:m_y;}T max() const{return m_x>m_y?m_x:m_y;}
private:T m_x;T m_y;
};
/*
//全类特化某种类型
template<>
class Comp<const char*>
{
public:Comp(const char* x,const char * y):m_x(x),m_y(y){}const char* min() const{return strcmp(m_x,m_y)<0?m_x:m_y;}const char * max() const{return strcmp(m_x,m_y)>0?m_x:m_y;}
private:const char* m_x;const char * m_y;
};
*/
//只特化成员函数
template<>
const char* Comp<const char *>::min() const
{return strcmp(m_x,m_y)<0?m_x:m_y;
}
//只特化成员函数
template<>
const char * Comp<const char *>::max() const
{return strcmp(m_x,m_y)>0?m_x:m_y;
}int main()
{cout<<::max<int>(45,33)<<endl;cout<<::max<string>("hello","world")<<endl;Comp<int> c1(34,20);cout<<c1.min()<<endl;Comp<const char *> c2("good","abc");cout<<c2.min()<<endl;return 0;
}
/*模版实现输出流控制*/
#include<iostream>
#include<sstream>
using namespace std;
template<typename T>
class omanip
{
public:omanip(ostream&(*fun)(ostream&,T),T arg):m_fun(fun),m_arg(arg){}friend ostream& operator<<(ostream& os,const omanip<T>& om){return om.m_fun(os,om.m_arg);}
private:ostream& (*m_fun)(ostream&,T);T m_arg;
};
class color
{public:color(int ctrl,int bg,int fg):m_ctrl(ctrl),m_bg(bg),m_fg(fg){}int m_ctrl;int m_bg;int m_fg;
};
ostream& colorfun(ostream& os,color args)
{if(args.m_ctrl==-1) return os<<"\033[0m";ostringstream oss;oss<<"\033["<<args.m_ctrl<<";"<<args.m_bg<<";"<<args.m_fg<<"m";return os<<oss.str();
}omanip<color> colorfun1(int ctrl=-1,int bg=-1,int fg=-1)
{return omanip<color>(colorfun,color(ctrl,bg,fg));
}
int main()
{cout<<colorfun1(1,44,33)<<"test color!"<<endl;cout<<colorfun1(-1,44,33)<<"test color!"<<endl;return 0;
}
#include<iostream>
using namespace std;
//智能指针模版类
template<typename T>
class smartptr
{
public:explicit smartptr(T* p=NULL):m_p(p){}smartptr(smartptr<T>& that):m_p(that.release()){}smartptr& operator=(smartptr<T> & that){if(&that!=this){reset(that.release());return *this;}}T& operator*() const{return *m_p;}T* operator->() const{return &**this;}~smartptr(){if(m_p){delete m_p;m_p=NULL;}}
private:T* release(){T* p=m_p;m_p=NULL;return p;}void reset(T* p){if(p!=m_p){delete m_p;m_p=p;}}T* m_p;
};
//智能指错模版类,针对数组的特化
template<typename T>
class smartptr<T[]>
{
public:explicit smartptr(T* p=NULL):m_p(p){}smartptr(smartptr<T>& that):m_p(that.release()){}smartptr& operator=(smartptr<T> & that){if(&that!=this){reset(that.release());return *this;}}T& operator*() const{return *m_p;}T* operator->() const{return &**this;}~smartptr(){if(m_p){delete[] m_p;m_p=NULL;}}
private:T* release(){T* p=m_p;m_p=NULL;return p;}void reset(T* p){if(p!=m_p){delete[] m_p;m_p=p;}}T* m_p;
};
class stu
{
public:stu(int id=0,const char * name=""):id(id),name(name){cout<<"stu()\n";}~stu(){cout<<"~stu()\n";}void who() const{cout<<"id:"<<id<<",name:"<<name<<endl;}
private:string name;int id;
};
int main()
{smartptr<stu> ps(new stu(1,"zhansan"));ps->who();smartptr<stu[]> pss(new stu[5]);return 0;
}
linux中stl模版的用法1相关推荐
- linux下的zz命令,linux中cut命令的用法
本文主要记录一下Linux中cut命令的用法. 1. cut命令使用说明 Usage: cut OPTION... [FILE]... cut命令用于选出FILE文件中每一行的某些部分,然后打印到标准 ...
- linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档
第 第 PAGE 1 页 共 NUMPAGES 1 页 linux中的ftp命令用法 Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由小编为大家整理了linux中的ftp命令用法 ...
- Linux中read命令的用法
1. 简单读取 read命令接收标准输入(键盘)的输入或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中.下面是 read命令的最简单形式: bixiaopeng@bixiaop ...
- Linux中的ftp命令怎么写,linux中的ftp命令用法
Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由学习啦小编为大家整理了linux中的ftp命令用法相关知识,希望对大家有帮助! linux中的ftp命令用法 1. 连接ftp服务 ...
- Linux中的cat命令用法
linux中的cat有三种用法: -列举所有文件 -创建文件 -合并文件 详细请看: http://www.cnblogs.com/perfy/archive/2012/07/23/2605550.h ...
- linux的source命令,Linux中source命令的用法
Linux中source命令的用法 Linux系统中,source命令通常用"."来代替,是一个点命令,与一般的命令有所不同,下面小编就给大家介绍下Linux中source命令的用 ...
- linux命令seq,Linux 中seq 命令的用法
Linux 中seq 命令的用法 用于产生从某个数到另外一个数之间的所有整数 用法:seq [选项]... 尾数 或:seq [选项]... 首数 尾数 或:seq [选项]... 首数 增量 尾数 ...
- linux 中的 ln 命令,Linux中ln命令的用法以及分析
在ubuntu用也有类似于windows中快捷方式这种类型的东西,即链接.这里一般使用ln命令来执行得到,ln命令用法简单,但是与windows不同,这里有硬链接和软链接两种类型的链接.在介绍两种链接 ...
- linux ldd命令源代码,Linux中ldd命令的用法详解
Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面小编就给大家介绍下Linux下ldd命令的使用方法,感兴趣的朋友一起来学习下吧. ldd命令用于判断某个可执 ...
最新文章
- Linux安装Nginx、Redis、django
- 推荐GitHub 上六大爆款AI学习项目,Star超过5.6w
- python刷b站教程_python + selenium 刷B站播放量的实例代码
- 给网游写一个挂吧(二) – 启动外挂上
- b 计数器位选信号 verilog_Verilog HDL菜鸟学习笔记———三、Verilog常用语法之一...
- Excel VBA - 文件及目录操作
- NodeBlog v0.1.0发布
- rpm安装与yum安装的区别与特点
- python_scrapy_爬虫
- python源码剖析-笔记2
- 设计一个简易的网吧计费系统
- 手机如何打开html文件怎么打开,怎么在手机上打开HTML文件怎么打开
- Progress实现进度条效果
- CAS号:60535-02-6,二肽Met-Trp
- python开发工程师是什么级别_什么条件才能成为Python开发工程师
- 全国女人都当妓女的古代神秘国(转载)
- 怎么让鼠标带黄色光圈?
- linux安装xbox无线手柄,ROS配置和使用Xbox One无线手柄
- CI/CD之搭建私有git仓库gitlab
- JavaScript与CSS的交互(五)
热门文章
- 计算机自动化考研英语应达到几级,考研英语需要过几级?
- linux amd64目录,如何在Ubuntu 10.04 (amd64)下面安装X-Plane
- 如何从 MySQL 读取 100w 数据进行处理
- 第十七章 类关键字 - DependsOn
- SQL学习计划-SQL语法复习笔记
- 设计模式 - 创建型模式_抽象工厂模式
- 51单片机计算器(源程序+流程图+答辩报告+综合设计)
- 使用Python编程求函数极限【例1】
- “河北超生女婴被抱走”案二审驳回上诉维持原判
- 在线教育项目Day04--后台管理系统集成方案vue-element-admin