青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

szwolf

專注于C++技術,再用1年的時間努力學C++!
隨筆 - 2, 文章 - 0, 評論 - 2, 引用 - 0
數據加載中……

STL學習之二:STL內存工具(一)

??????用Traits進行類別推導,將類別選擇工作放到編譯期進行,利用重載提高效率。
??????下面的type_traits.h是我直接從SGI STL里Copy出來的。。。

#ifndef?TYPE_TRAITS_H
#define ?TYPE_TRAITS_H

// 為了了重載確定那些類弄型是不用析構的SGI?STl用了type_traits
// 并將一些Scale?type進行特例化
struct ?__true_type? {
}
;

struct ?__false_type? {
}
;

template?
< class ?_Tp >
struct ?__type_traits? {?
???typedef?__true_type?????this_dummy_member_must_be_first;

???typedef?__false_type????has_trivial_default_constructor;
???typedef?__false_type????has_trivial_copy_constructor;
???typedef?__false_type????has_trivial_assignment_operator;
???typedef?__false_type????has_trivial_destructor;
???typedef?__false_type????is_POD_type;
}
;

template
<>
struct ?__type_traits < bool > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < char > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < signed? char > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < unsigned? char > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < wchar_t > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;

template
<>
?
struct ?__type_traits < short > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < unsigned? short > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < int > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < unsigned? int > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < long > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < unsigned? long > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;

#ifdef?__STL_LONG_LONG
template
<>
?
struct ?__type_traits < long ? long > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;

?
struct ?__type_traits < unsigned? long ? long > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;

#endif ?/*?__STL_LONG_LONG?*/
template
<>
?
struct ?__type_traits < float > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < double > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < long ? double > ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;

template?
< class ?_Tp >
struct ?__type_traits < _Tp *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < char *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < signed? char *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < unsigned? char *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < const ? char *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < const ?signed? char *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;
template
<>
?
struct ?__type_traits < const ?unsigned? char *> ? {
???typedef?__true_type????has_trivial_default_constructor;
???typedef?__true_type????has_trivial_copy_constructor;
???typedef?__true_type????has_trivial_assignment_operator;
???typedef?__true_type????has_trivial_destructor;
???typedef?__true_type????is_POD_type;
}
;

#endif

以下是construct 和 destroy的實現
#ifndef?MEM_TOOlS_H
#define?MEM_TOOlS_H
#include?
"type_traits.h"
using?namespace?std;
namespace?SGI
{
????template
<typename?T1,?typename?T2>
????inline?
void?construct(T1*?p,?const?T2&?value)
????
{
????????
new(p)T1(value);
????}

????
????template
<typename?T>
????inline?
void?construct(T*?p)
????
{
????????
new(p)T();
????}


????template
<typename?T>
????
void?destroy(T*?p)
????
{
????????p
->~T();
????}


????template
<typename?ForwardIterator>
????inline?
void?destroy_aux(ForwardIterator?first,?ForwardIterator?last,?__false_type)
????
{
????????
for?(;?first?<?last;?++first)
????????????destroy(
&*first);

????????cout?
<<?"false?type"?<<?endl;
????}


????template
<typename?ForwardIterator>
????inline?
void?destroy_aux(ForwardIterator?first,?ForwardIterator?last,?__true_type)
????
{
????????cout?
<<?"true?type"?<<?endl;
????}


????template
<typename?ForwardIterator>
????inline?
void?destroy(ForwardIterator?first,?ForwardIterator?last)
????
{
????????_destroy(first,?last,?value_type(
*first));
????}


????template
<typename?ForwardIterator,?typename?T>
????inline?
void?_destroy(ForwardIterator?first,?ForwardIterator?last,?T*)
????
{
????????typedef?__type_traits
<T>::has_trivial_destructor?trivial_destructor;
????????destroy_aux(first,?last,?trivial_destructor());
????}


????inline?
void?destroy(char*,?char*)?
????
{
????????cout?
<<?"char*?type"?<<?endl;
????}

????inline?
void?destroy(wchar_t*,?wchar_t*)?
????
{
????????cout?
<<?"wchar_t*?type"?<<?endl;
????}
????

}


#endif

在main中對construct,destroy時行測試

//?mem_tools.cpp?:?定義控制臺應用程序的入口點。
//
/*
?*????模仿實現SGI?STL中的內存工具
?*??szwolf?@?szu
?*??2006.08.07
?
*/

#include?
"stdafx.h"
#include?
"sgi_allocator.h"
#include?
<iostream>
#include?
<vector>
#include?
<algorithm>
#include?
"mem_tools.h"

class?mem_test
{
public:
????mem_test(
const?char*?msg)
????
{
????????cout?
<<?msg?<<?endl;
????}


????
~mem_test()
????
{
????????cout?
<<?"dead~~"?<<?endl;
????}

}
;

int?_tmain(int?argc,?_TCHAR*?argv[])
{
????
//????很郁悶為什么下面的代碼是錯的?
????
//????typedef?simple_alloc<mem_test,?SGI::alloc>?data_allcator;
????
//????mem_test*?t?=?data_allocator::allocate();

????SGI::simple_alloc
<mem_test,?SGI::alloc>?data_allocator;
????
????mem_test
*?t?=?data_allocator.allocate();

????SGI::construct(t,?
"come to live!");
????SGI::destroy(
&*t);

????SGI::simple_alloc
<char,?SGI::alloc>?char_alloc;
????
char?*p?=?char_alloc.allocate(133);
????strcpy(p,?
"hellow!");
????SGI::destroy(p,p
+8);
????char_alloc.deallocate(p,?
133);

????system(
"pause");
????
return?0;
}
實中用到的simple_alloc及sgi_allocator.h是上一篇隨筆里的東西。。。

posted on 2006-08-07 01:47 szwolf 閱讀(1071) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲激情女人| 欧美成人一区在线| 免费久久久一本精品久久区| 久久成人精品| 久久久久综合网| 欧美1级日本1级| 亚洲激情网站免费观看| 亚洲三级影院| 亚洲一区二区三区视频| 性欧美1819性猛交| 欧美在线观看一区二区| 免费欧美在线视频| 国产精品v日韩精品v欧美精品网站| 国产精品家庭影院| 国自产拍偷拍福利精品免费一| 精品999在线播放| 亚洲精品欧美一区二区三区| 亚洲一区视频| 欧美xxxx在线观看| 亚洲深夜福利| 蜜臀91精品一区二区三区| 欧美视频在线一区二区三区| 黑人巨大精品欧美黑白配亚洲| 亚洲精品日韩在线观看| 午夜一区二区三视频在线观看| 久久最新视频| 99这里只有久久精品视频| 性一交一乱一区二区洋洋av| 美女露胸一区二区三区| 国产精品视频一区二区三区| 91久久午夜| 久久九九99视频| 一本色道久久加勒比88综合| 久久综合色婷婷| 国产精品一二三四区| 亚洲精品国精品久久99热一| 久久精品99国产精品酒店日本| 亚洲激情在线| 久久久久成人精品免费播放动漫| 欧美屁股在线| 亚洲国产精品久久久久婷婷884| 欧美一区网站| 亚洲一区二区免费视频| 欧美日韩国产二区| 亚洲第一福利视频| 久久婷婷人人澡人人喊人人爽| 亚洲一区二区免费看| 欧美视频一区二区三区在线观看| 亚洲欧洲一区二区三区在线观看 | 香蕉久久精品日日躁夜夜躁| 欧美激情影院| 亚洲国产日日夜夜| 免费高清在线视频一区·| 午夜亚洲福利| 国产精品久久国产三级国电话系列 | 久久久精彩视频| 国产精品午夜国产小视频| 中文网丁香综合网| 日韩视频二区| 欧美视频福利| 亚洲欧美日韩精品久久久| 99精品福利视频| 欧美色视频日本高清在线观看| 99国产精品| 亚洲免费观看视频| 国产精品国产三级国产普通话三级| 99riav久久精品riav| 亚洲美女电影在线| 国产精品狠色婷| 先锋影音久久| 久久精品男女| 亚洲精品乱码久久久久| 亚洲国产精品一区二区三区| 欧美精品色网| 亚洲一区二区三区乱码aⅴ蜜桃女| 一本色道久久综合一区| 国产伦精品一区二区| 蜜桃久久av| 欧美精品综合| 欧美视频在线视频| 欧美一区二区三区精品| 久久国产主播精品| 亚洲精品国产拍免费91在线| 日韩一区二区精品视频| 国产日韩精品入口| 欧美激情在线免费观看| 国产精品v亚洲精品v日韩精品 | 久久久精品五月天| 亚洲人成网站999久久久综合| 亚洲人体一区| 国产视频欧美| 欧美搞黄网站| 国产精品久久久久久久7电影 | 欧美在线啊v一区| 亚洲欧洲日韩综合二区| 在线综合欧美| 亚洲国产精品女人久久久| 99精品国产在热久久下载| 国产日韩欧美一区在线 | 久久久久久香蕉网| 欧美日韩dvd在线观看| 久久久久久日产精品| 欧美区在线观看| 久久综合电影| 国产精品劲爆视频| 亚洲福利在线看| 国产日韩欧美高清| 99精品欧美一区二区蜜桃免费| 国内精品伊人久久久久av影院| 亚洲日本va午夜在线影院| 国产一区二区精品丝袜| 亚洲美女黄色| 亚洲欧洲精品一区二区| 久久www免费人成看片高清| 中文在线不卡视频| 免费在线观看一区二区| 久久人人爽国产| 国产精品久久久久久久9999| 亚洲国产成人高清精品| 韩日成人av| 性色av一区二区怡红| 午夜精品久久久久久久白皮肤| 欧美电影在线| 欧美高清视频在线| 红桃av永久久久| 午夜精品亚洲一区二区三区嫩草| 一区二区三区不卡视频在线观看| 可以免费看不卡的av网站| 久久久欧美精品sm网站| 国产午夜亚洲精品不卡| 亚洲午夜精品在线| 亚洲欧美激情一区二区| 欧美日韩视频免费播放| 亚洲精品美女久久7777777| 亚洲清纯自拍| 麻豆精品视频在线观看| 欧美成人综合在线| 亚洲高清视频一区| 久久青草久久| 欧美不卡福利| 亚洲欧洲日韩综合二区| 欧美激情亚洲自拍| 日韩视频在线你懂得| 亚洲私拍自拍| 国产精品久久久久一区二区三区| 亚洲天堂av高清| 久久精品99国产精品| 伊人久久亚洲影院| 欧美国产日本韩| 夜夜嗨av一区二区三区| 先锋亚洲精品| 一区免费视频| 欧美精品黄色| 一本色道久久综合| 性久久久久久久| 在线国产亚洲欧美| 欧美电影专区| 在线天堂一区av电影| 欧美一区二区三区在线播放| 国产视频一区免费看| 久久综合久久美利坚合众国| 亚洲国产精品久久久| 亚洲一区二区免费视频| 国产日韩精品一区| 快射av在线播放一区| 亚洲精品久久久久久久久久久久久| 在线综合欧美| 国产综合自拍| 欧美精品91| 欧美一级日韩一级| 亚洲国产精品成人精品| 亚洲欧美日韩精品久久久| 伊人久久久大香线蕉综合直播| 欧美精品成人| 久久精品女人| 一区二区成人精品| 麻豆乱码国产一区二区三区| 一区二区三区波多野结衣在线观看| 国产欧美69| 欧美日本国产一区| 久久精品国产第一区二区三区| 亚洲精品欧美日韩| 久久人人看视频| 亚洲影院色无极综合| 亚洲国产成人精品久久久国产成人一区| 欧美日本在线| 久久综合九色99| 欧美亚洲尤物久久| 亚洲精选视频在线| 亚洲丁香婷深爱综合| 久久精品国产在热久久| 中文一区字幕| 亚洲另类自拍| 亚洲大胆女人| 国产自产v一区二区三区c| 欧美日韩中文在线| 欧美精品999| 欧美护士18xxxxhd| 久久人人精品| 久久精品日产第一区二区|