首页 > 其他 > 详细

模板函数类型萃取

时间:2016-03-28 12:04:37      阅读:276      评论:0      收藏:0      [点我收藏+]

类型萃取实现顺序表

#include <iostream>

#include<string>

using namespace std;

struct TrueType

{

bool get()

{

return true;

}


};

struct FalseType

{

bool get()

{

return false;

}


};

template <typename T>

struct TypeTraits

{

typedef FalseType istPodType;

};

template<>

struct TypeTraits<int>

{

typedef TrueType isPodType;

};

template<typename T>

class Seqlist

{

private:

T *_data;

int _size;

int _capacity;

public:

Seqlist()

:_size(0)

, _capacity(3)

{

_data = new T[_capacity];

}

~Seqlist()

{

if (_data != NULL)

{

delete[]_data;

_data = NULL;

}

}

void CheakCapacity()

{

if (_size == _capacity)

{

if (TypeTraits<T>::isPodType().get())

{

T * tem = new T[_capacity];

memcpy(tem, _data, sizeof(T)*_capacity);

delete[]_data;

_data = tem;

_capacity = 2 * _capacity + 3;

}

else 

{

T * tem = new T[_capacity];

int i = 0;

for (i = 0; i < _size; i++)

{

tem[i] = _data[i];

}

delete[]_data;

_data = tem;

_capacity = 2 * _capacity + 3;

}

}

}

void PushBack(const T &d)

{

CheakCapacity();

_data[_size] = d;

_size++;

}

void print()

{

int i = 0;

for (i = 0; i < _size; i++)

cout << _data[i] << " ";

}

};


int main()

{

Seqlist<int> s;

s.PushBack(1);

s.PushBack(2);

s.PushBack(3);

s.PushBack(4);

s.print();

getchar();

return 0;

}

2.类型萃取实现copy函数

#include <iostream>

#include<string>

using namespace std;

struct TrueType

{

bool get()

{

return true;

}


};

struct FalseType

{

bool get()

{

return false;

}


};

template <typename T>

struct TypeTraits

{

typedef FalseType istPodType;

};

template<>

struct TypeTraits<int>

{

typedef TrueType isPodType;

};

template <typename T>

void copy(T *dest, const T *src,int size, TrueType)

{

cout << typeid(T).name() << endl;

memcpy(dest, src, size*sizeof(T));

}

template <typename T>

void copy(T *dest, const T *src, int size, FalseType)

{

cout << typeid(T).name() << endl;

int i = 0;

for (i = 0; i < size; i++)

dest[i] = src[i];

}

int main()

{

int arr1[] = { 1, 2, 3, 4, 5 };

int i = 0;

int  arr2[6] = { 0 };

int size1 = sizeof(arr1) / sizeof(arr1[0]);

copy<int>(arr2, arr1,size1, TypeTraits<int>::isPodType());

for (i = 0; i < size1; i++)

cout << arr2[i] << " ";

getchar();

return 0;

}


模板函数类型萃取

原文:http://10810512.blog.51cto.com/10800512/1757462

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!