简单的一个C++中traits功能的实现例子

原创 2015年07月10日 14:01:41
#include <iostream>

//用于标记不同的类型
struct _false_type {};
struct _true_type {};

//-------------------------------使用模板特例化功能,在不同类型内放置不同的定义类型------------------
template<typename value_type>
struct type_traits
{
	typedef _true_type Can_Print;
};


class MyType
{
};
//此处使用到模板特例化
template<>
struct type_traits<MyType>
{
	typedef _false_type Can_Print;
};


//相当于中转站,根据不同的类型转到不同的实际操作
template<typename value_type>
void Print(value_type value)
{
	typedef typename type_traits<value_type>::Can_Print Can_Print;
	_Print(value, Can_Print());
}

//-----------------------------实际操作如何进行-------------------------
template<typename value_type>
void _Print(value_type value, _false_type)
{
	std::cout << "this type can't printed!" << std::endl;
}

template<typename value_type>
void _Print(value_type value, _true_type)
{
	std::cout << value << std::endl;
}

//主函数
int main(int argc, char const *argv[])
{
	int x = 0;
	Print(x);

	MyType m;
	Print(m);

	std::cin.get();

	return 0;
}

相关文章推荐

一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能

我们知道JavaScript中很早就提供了window.history对象,利用history对象的forward()、Go()、back()方法能够方便实现不同页面之间的前进、后退等这种导航功能。但...
  • Truong
  • Truong
  • 2017年06月09日 16:58
  • 242

一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能

我们知道JavaScript中很早就提供了window.history对象,利用history对象的forward()、go()、back()方法能够方便实现不同页面之间的前进、后退等这种导航功能。但...

一个最简单的例子,清楚说明回调函数的作用和强大功能

                   一个最简单的例子,清楚说明回调函数的作用和强大功能    考虑一个这样的例子:        假如某个项目的底层和高层是由不同的人员协同完成.底层负责数据的存取,...
  • syc001
  • syc001
  • 2011年04月21日 13:40
  • 464

DIY一个C++ traits来判断enum是否有用户自定义的operator<<

前段时间发现自己的String库中有个bug: String& operator+=(int); String& operator+=(unsigned); // 所有的整型、浮点型都有一个...

对于C++中traits的简单介绍

先看这样一个例子。如果有一个模板类Test: template class Test { ...... }; 假设有这样的需求,类Test中的某部分处理会随着类型T的不同而会有所不同,比如...

C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,

#include using namespace std; class CFraction {private: int nume; // 分子 int deno; // 分...

一个c++获取ip的简单例子

直接上代码: // GetLocalIP.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" /* 编译环境: visual c++ */ #inclu...

[C++] Windows下的socket编程(这是一个简单的TCP/IP例子)

Socket的概念: Socket,即套接字,用于描述地址和端口,是一个通信链的句柄。 应用程序通过Socket像网络发出请求或者回应。 什么事客户/服务器模式: 在TCP/IP网络应...

C++——一个简单的多文件具体例子

(From 九天雁翎) Person.h #include  #include  class Person { public: Person(const std::string...
  • hcbbt
  • hcbbt
  • 2013年04月26日 00:32
  • 1008
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的一个C++中traits功能的实现例子
举报原因:
原因补充:

(最多只允许输入30个字)