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. [机器学习] 分类 --- Naive Bayes(朴素贝叶斯)

    Naive Bayes-朴素贝叶斯 Bayes' theorem(贝叶斯法则) 在概率论和统计学中,Bayes' theorem(贝叶斯法则)根据事件的先验知识描述事件的概率.贝叶斯法则表达式如下所示 ...

  2. Java基础系列--throw、throws关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8484697.html 一.概述 throw和throws就是异常相关的关键字,在java中 ...

  3. Mybatis学习(一)—————mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  4. 使用Pyinstaller转换.py文件为.exe可执行程序

    pyinstaller能够在Windows.Linux等操作系统下将Python脚本打包成可直接运行程序.使Python脚本可以在没有安装Python的环境中直接运行,方便共享. 测试环境 pytho ...

  5. Spring Cloud Stream消费失败后的处理策略(一):自动重试

    之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式.不过不论 ...

  6. 闪电侠 Netty 小册里的骚操作

    前言 即使这是一本小册,但基于"不提笔不读书"的理念,仍然有必要总结一下.此小册对于那些"硬杠 Netty 源码 却不曾在千万级生产环境上使用实操"的用户非常有 ...

  7. NLP入门(四)命名实体识别(NER)

      本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER).   命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领 ...

  8. Linq中的Select与Select many

    Select与Select Many 之前在项目中查询数据库中的数据,都是通过sql语句来查询的,但是随着时代的发展,微软在.Net Framework 4.5版中推出的一个主要的特性——LINQ. ...

  9. C#基础知识总结(四)

    摘要 循环结构的总结.跳转语句(break.continue).调试程序 一.循环结构的总结 1.while循环 ; ) { Console.WriteLine(i); i++; } 2.do-whi ...

  10. [PHP] PHP闭包(closures)

    1.闭包函数也叫匿名函数,一个没有指定名称的函数,一般会用在回调部分 2.闭包作为回调的基本使用, echo preg_replace_callback('~-([a-z])~', function ...