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. 基于saltstack自动化部署高可用kubernetes集群

    SaltStack自动化部署HA-Kubernetes 本项目在GitHub上,会不定期更新,大家也可以提交ISSUE,地址为:https://github.com/skymyyang/salt-k8 ...

  2. 基于FineUIMVC的代码生成器(传统三层)v1.0-2

    第一篇博客只是粗略说明了一下,其实这个工具真正用话可能大家还要细看下,我今天(连夜)写个例子,截几个图,做一下自定义模板的实例教程,因为代码生成本身是个工具,动画效果都是次要的,主要是工具本身,其中自 ...

  3. Dubbo 源码分析系列之三 —— 架构原理

    1 核心功能 首先要了解Dubbo提供的三大核心功能: Remoting:远程通讯 提供对多种NIO框架抽象封装,包括"同步转异步"和"请求-响应"模式的信息交 ...

  4. Go Web:RESTful web service示例

    RESTful架构的简介 web服务的架构模式主要有2种:SOAP和REST.SOAP和REST都回答了同一个问题:如何访问web服务. SOAP风格的程序是功能驱动的,要借助xml来传递数据,明确表 ...

  5. gcc:call to '__open_missing_mode' declared with attribute error

    因为使用 open 函数的时候,如果在第二个参数中使用了 O_CREAT,就必须添加第三个参数:创建文件时赋予的初始权限.这个取决于 gcc 的版本,有的版本不会报这个错误. 解决办法: 找到源码中报 ...

  6. [翻译]一个新式的基于文本的浏览器 Browsh

    介绍 什么是Browsh? Browsh是一个纯文本浏览器,可以运行在大多数的TTY终端环境和任何浏览器.目前1 ,终端客户端比浏览器客户端更先进2. TTY 客户端 终端客户端即时更新和交付,以便于 ...

  7. Python正则进阶

    目录 1.Python正则表达式模块 1.1 正则表达式处理字符串主要有四大功能 1.2 Python中re模块使用正则表达式的两种方法 1.3 正则表达式对象的常用方法 1.4 匹配对象的属性与方法 ...

  8. SpringBoot数据库集成-Mybatis

    一.java web开发环境搭建 网上有很多教程,参考教程:http://www.cnblogs.com/Leo_wl/p/4752875.html 二.Spring boot搭建 1.Intelli ...

  9. Js 转动抽奖实现

    一.样本 地址:http://js.zhuamimi.cn/choujiang/index.htm 源码:https://pan.baidu.com/s/15KhesfcLf1WMOom6PhzCjA ...

  10. CSS3 - @keyframes

    语法 @keyframes animationname { keyframes-selector {css-styles;} } 值 描述 animationname 必需.定义动画的名称. keyf ...