c/c++ 模板与STL小例子系列<三> traits

对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题。

从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介。traits好像可以解决这种问题。

通过traits技术,可以达到扔进去什么类型,给我吐出什么类型

扔进去的是int出来的t1也是int类型

Iterator_1<int>::value_type t1 = 100;

下面弄了3个小例子,可以初步感受一下。

例子1:

#include <iostream>
using namespace std; template<typename T, typename U>
class traits{
public:
typedef T value_type1;
typedef T& ref1;
typedef U value_type2;
typedef U& ref2;
}; template<typename TA, typename UA>
class A : public traits<TA, UA>
{ }; int main(){
A<int, double>::value_type1 a = 10;
A<int, double>::ref1 b = a;
cout << a << endl;
cout << b << endl;
A<int, double>::value_type2 a1 = 10.2;
A<int, double>::ref2 b1 = a1;
cout << a1 << endl;
cout << b1 << endl;
}

例子2:

#include <iostream>
using namespace std;
class Test1;
class Test2; template<typename T>
class TypeTb1{}; template<>
class TypeTb1<Test1>{
public:
typedef char ret_type;
typedef int p1_type;
typedef double p2_type;
};
template<>
class TypeTb1<Test2>{
public:
typedef double ret_type;
typedef double p1_type;
typedef int p2_type;
};
template<typename T>
class Test{
public:
typename TypeTb1<T>::ret_type func(typename TypeTb1<T>::p1_t\
ype x,
typename TypeTb1<T>::p2_type y){
return x;
}
};
int main(){
Test<Test1> t;
cout << t.func(65, 6.18) << endl;
Test<Test2> t2;
cout << t2.func(6.18, 65) << endl;
}

例子3:

#include <iostream>
using namespace std; class A{
public:
void show(){cout << "A show" << endl;}
};
template<typename T>
class Iterator_1{
public:
typedef T value_type;
typedef value_type* ptn;
typedef value_type& ref;
};
template<typename T>
class Iterator_2{
public:
typedef T value_type;
typedef value_type* ptn;
typedef value_type& ref;
}; template<typename T>
struct Traits{}; template<typename T>
struct Traits<T *>{
typedef T value_type;
typedef value_type* ptn;
typedef value_type& ref;
}; int main(){
Iterator_1<int>::value_type t1 = 100;
cout << t1 << endl;
Iterator_2<double>::value_type t2 = 1.23;
cout << t2 << endl;
Traits<double*>::value_type t3 = 4.45;
cout << t3 << endl; Iterator_1<A>::ptn p;
p->show();
}

c/c++ 模板与STL小例子系列<三> traits的更多相关文章

  1. c/c++ 模板与STL小例子系列<二> 模板类与友元函数

    c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...

  2. c/c++ 模板与STL小例子系列<一 >自建Array数组

    c/c++ 模板与STL小例子系列 自建Array数组 自建的Array数组,提供如下对外接口 方法 功能描述 Array() 无参数构造方法,构造元素个数为模板参数个的数组 Array(int le ...

  3. python2.7练习小例子(三)

        3):题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?     程序分析:假设该数为 x.1.则:x + 100 = n2, x + 100 + ...

  4. Ansible 小手册系列 三(命令介绍)

    仅仅只是介绍,可以选择跳过 ansible ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令.默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块. Us ...

  5. python小例子(三)

    1.提高Python运行速度的方法 (1)使用生成器,节约大量内存: (2)循环代码优化,避免过多重复代码的执行: (3)核心模块使用cpython,pypy等: (4)多进程,多线程,协程: (5) ...

  6. 小例子(三)、winform控件的移动

    程序:Do You Love Me ? 说明:就是鼠标移动到“不爱”按钮上按钮就会移动到其他地方 代码: //鼠标进入控件表面的事件MouseEnter //this.ClientSize.Width ...

  7. 邮件报警以及服务端能否ping通客户端的小例子(三)

           就这个小小的东西,弄了一天,弄的头晕眼花,毕竟第一次弄这个,记录下来,若干年之后,回看这些笔记,不知是什么样的感想,哈哈.我学一个东西的时候喜欢系统的来,一点一点的来,做这个的时候想法很 ...

  8. HDU 4520 小Q系列故事――最佳裁判(STL)

    小Q系列故事——最佳裁判 Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体 ...

  9. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

随机推荐

  1. 彻底弄懂python编码

    在编写python程序的过程中,中英文混用经常会出现编码问题.围绕此问题,本文首先介绍编码的含义及常用编码,随后列举几个python经常遇到的编码异常及解决方法,接着列举笔者在实践中遇到的异常出现的情 ...

  2. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境

    Visual Studio Code 免费跨平台文本编辑器,插件资源丰富,我把其作为Debug的首选. 下载地址:https://code.visualstudio.com/Download 安装之后 ...

  3. 第一册:lesson fifty one.

    原文: A pleasant climate. A:Where do you come frome? B:I come from Greece. A:What's the climate like i ...

  4. 从零开始学安全(十二)●建立自己的DNS服务器

    我们的环境windows server 2012   虚拟机 打开服务器的添加角色和向导功能 添加DNF服务器安装 点击 在正向查找区域 反键新建区域 这里我一般输入一级域名 这是输入baidu.co ...

  5. Failed at the @ watch script 'cross-env NODE_ENV=development 使用cross-env解决跨平台设置NODE_ENV的问题

    今天在安装js依赖包时,根目录的package.json: { "private": true, "scripts": { "dev": & ...

  6. netty-socketio 概述

    netty-socketio 概述 netty-socketio是一个开源的Socket.io服务器端的一个java的实现,它基于Netty框架,可用于服务端推送消息给客户端. 说到服务端推送技术,一 ...

  7. POST与GET的联系与区别

    是什么? GET与POST是在客户机和服务器之间进行请求-响应时,两种最常被用到的方法: GET-从指定的资源请求数据. POST-向指定的资源提交要被处理的数据. 所以我们从语义上就能看出两者最明显 ...

  8. 腾讯云下的CentOS7 安装最新版Python3.7.0

    第一步下载Python3.7.0 刚开始我是在windows上下载之后 传到FTP服务器上的 后来发现使用以下命令可以更快捷地下载到服务器 *  wget https://www.python.org ...

  9. MySQL指令笔记

    -- 双中划线+空格: 单行注释, 与#相同 -- 链接数据库 mysql.exe -h localhost -P3306 -uroot -p -- 查看服务器的对外处理字符集 show variab ...

  10. JavaScript有这几种测试分类

    译者按: 也许你讨厌测试,但是你不得不面对它,所以至少区分一下单元测试.集成测试与功能测试?对吧… 原文: What are Unit Testing, Integration Testing and ...