C++11__自己实现的一个swap类
来源:互联网 发布:如何推广淘宝网店 编辑:程序博客网 时间:2024/05/01 07:04
近来学习C++11,对其中的move语意比较着迷,顺手写了一个swap类。
这个类用来交换2个同类型对象(类型为T)的值,配合我博客前面的type_traits的类可以萃取T的特性,然后用最效率办法做交换(尽量使用move语意)
特点:
1.如果T类型有默认构造函数,使用T的默认构造函数来生成MySwap对象,否则使用T的拷贝构造函数。
2.如果T类型有move语意的=操作符,使用move语意的=操作符实现A和B的值交换,否则使用普通的=操作符。
3.针对类型T可以做type_traits的模板特化来实现特性设置。
用法:
1. MySwap<T> myswap(A); //A的类型为T
2. myswap.swap(A, B); // A和B的类型为T
#ifndef MySwap_H_#define MySwap_H_#include <utility>#include "type_traits.h" template<typename T>inline void _swap(T& lhs, T& rhs, T& temp, SGISTL::false_type){temp = lhs;lhs = rhs;rhs = temp;}template<typename T>inline void _swap(T& lhs, T& rhs, T& temp, SGISTL::true_type){temp = std::move(lhs);lhs = std::move(rhs);rhs = std::move(temp);}template<typename T, typename ConstructType = typename type_traits<T>::has_trivial_default_constructor>class MySwap{private:T Data_;public:typedef T value_type;typedef typename type_traits<T>::has_trivial_default_constructor construct_type;typedef typename type_traits<T>::has_move_assigment_operator assigment_type;public:explicit MySwap(const T &t):Data_(t){}void swap(T& lhs, T& rhs){_swap(lhs, rhs, this->Data_, assigment_type());} private:MySwap(const MySwap &rhs);MySwap& operator = (const MySwap&);bool operator == (const MySwap&);};template<typename T>class MySwap<typename T, SGISTL::true_type>{private:T Data_;public:typedef T value_type;typedef SGISTL::true_type construct_type;typedef typename type_traits<T>::has_move_assigment_operator assigment_type;public:explicit MySwap(const T&):Data_(){}void swap(T& lhs, T& rhs){_swap(lhs, rhs, this->Data_, assigment_type());}private:MySwap(const MySwap &rhs);MySwap& operator = (const MySwap &);bool operator == (const MySwap&);};#endif
- C++11__自己实现的一个swap类
- 自己实现swap()函数交换两个数的值
- C++__类模板的派生
- 用c语言实现一个自己的atof()函数
- C语言动手实现一个自己的HttP服务
- 用C语言实现一个自己的文件拷贝工具
- 【c++】模拟实现string类__实现增删查改
- 链表的实现(C语言)__一步一步来
- 自己写的栈类,stack(*^__^*) 嘻嘻……
- 实现一个自己的线程类
- OpenCV 实现一个自己的Algorithm类
- C++实现一个自己的string类
- 实现一个自己的类jq函数库
- 三种实现交换的方法,其中一个诡异的swap函数——C/C++语言(问题求助)
- effective c++:写出一个不抛出异常的swap函数
- swap vs templates 模板类中定义自己的swap函数
- c/c++和java实现swap函数的不同处
- C++PassingBy Reference之Swap函数的实现
- Solr通过配置自动Commit
- How to check which responsiblity we are using
- H.264码流结构
- 从MySQL得到最大的性能
- CentOS 5.x使用yum快速安装MySQL 5.5.X
- C++11__自己实现的一个swap类
- 我的2012
- [LeetCode] Recover Binary Search Tree
- 例解 autoconf 和 automake 生成 Makefile 文件
- ArcGis与.net颜色转换
- 排序算法之鸡尾酒排序
- 传入中文参数导致的一系列乱码问题
- c++ 函数后面的const理解
- Arcgis Server系列 ADF的开发与实例