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

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 閱讀(1066) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美尤物巨大精品爽| 亚洲尤物视频网| 国产欧美一区二区精品性色| 欧美视频在线观看| 国产精品久久影院| 午夜精品久久久久久| 一区二区日韩伦理片| 一本色道久久综合亚洲精品不卡| 亚洲午夜免费福利视频| 欧美中文字幕在线视频| 久久亚洲国产精品一区二区 | 亚洲一区二区三区四区五区黄| 亚洲精品国产精品国自产观看| 亚洲伦理久久| 午夜精品偷拍| 玖玖玖国产精品| 亚洲片在线资源| 亚洲精品男同| 欧美专区第一页| 欧美精品一区在线播放| 国产农村妇女精品一区二区| 红杏aⅴ成人免费视频| 日韩视频一区二区在线观看| 久久精品国产69国产精品亚洲 | 久热国产精品| 亚洲精品国久久99热| 亚洲欧美日韩国产中文在线| 久久这里只精品最新地址| 欧美特黄视频| 亚洲区一区二区三区| 欧美一区午夜精品| 亚洲免费播放| 麻豆精品视频在线观看| 国产裸体写真av一区二区| 日韩视频中文字幕| 免费亚洲电影在线观看| 午夜精品影院在线观看| 欧美日韩一区在线观看| 亚洲大胆女人| 久久精品国产欧美激情| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美国产日韩一区二区三区| 欧美精品粉嫩高潮一区二区| 免费不卡亚洲欧美| 国内精品视频一区| 亚洲欧洲av一区二区三区久久| 欧美国产日韩精品| 久久精品国产99国产精品| 国产精品一二三四| 亚洲女女做受ⅹxx高潮| 99re6这里只有精品| 欧美精品午夜| 一区二区国产在线观看| 亚洲精品日韩激情在线电影| 欧美成人黄色小视频| 91久久国产精品91久久性色| 免费试看一区| 久久婷婷蜜乳一本欲蜜臀| 红桃视频亚洲| 欧美国产1区2区| 欧美成人69av| 99亚洲一区二区| 亚洲美女av网站| 欧美日韩一区二区在线播放| 一本一本久久a久久精品综合妖精| 亚洲国产日韩在线一区模特| 欧美成人资源网| 一区二区三区日韩欧美| 中国av一区| 国产亚洲精品久久久久动| 久久久久.com| 免费观看一区| 中文亚洲欧美| 香港久久久电影| 激情欧美丁香| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美成人黑人xx视频免费观看| 日韩视频―中文字幕| 中文在线资源观看网站视频免费不卡| 国产精品毛片大码女人| 久久av一区二区三区漫画| 久久精品国产在热久久| 亚洲人体大胆视频| 国产精品99久久久久久宅男| 国产美女精品人人做人人爽| 久久综合一区二区| 欧美日韩一区二区在线视频| 久久精品欧美日韩精品| 暖暖成人免费视频| 西瓜成人精品人成网站| 久久欧美中文字幕| 国产美女一区二区| 亚洲在线中文字幕| 欧美专区日韩视频| 一区二区三区日韩在线观看| 性色一区二区三区| 日韩午夜中文字幕| 欧美一区二区播放| 99国内精品久久| 欧美在线啊v| 亚洲一级一区| 欧美成人国产一区二区| 久久激情久久| 亚洲一区二区三区三| 久久香蕉国产线看观看av| 亚洲天堂网在线观看| 欧美自拍丝袜亚洲| 亚洲一区二区在线免费观看视频| 欧美自拍偷拍午夜视频| 亚洲一区二区三区精品动漫| 久久艳片www.17c.com| 欧美一区二区成人6969| 欧美日韩一区在线观看视频| 欧美电影打屁股sp| 国产一区二区精品久久99| 一本色道久久综合亚洲精品按摩| 亚洲国产精品第一区二区| 欧美一区二区三区免费视| 中文国产亚洲喷潮| 欧美成人在线免费观看| 欧美jizzhd精品欧美巨大免费| 国产午夜精品一区二区三区视频 | 久久先锋资源| 国产日韩欧美日韩大片| 亚洲影院色无极综合| 亚洲一区二区三区777| 欧美日韩国产va另类| 亚洲国内精品在线| 亚洲人成在线免费观看| 久久躁狠狠躁夜夜爽| 蜜桃久久精品乱码一区二区| 国产视频一区二区在线观看| 亚洲综合精品| 亚洲欧美资源在线| 国产精品乱码一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 国产精品99久久久久久久女警| 欧美国产日本在线| 亚洲欧洲日韩综合二区| 日韩一级黄色片| 欧美日韩国产一区精品一区| 日韩小视频在线观看专区| 亚洲深夜福利视频| 国产精品毛片高清在线完整版| 亚洲一区中文| 久久久国产91| 亚洲国产精品日韩| 欧美精品啪啪| 亚洲一区免费在线观看| 久久久久国产精品午夜一区| 狠狠入ady亚洲精品经典电影| 久久久综合免费视频| 亚洲国产欧美一区二区三区久久| 日韩午夜电影| 国产精品视频久久| 久久久久久久高潮| 亚洲国产专区| 新片速递亚洲合集欧美合集| 国产中文一区二区| 欧美激情1区2区3区| 亚洲伊人色欲综合网| 久久综合网色—综合色88| 亚洲精品一区二区三区在线观看 | 香蕉久久国产| 欧美激情aⅴ一区二区三区| 国产精品视频免费观看| 欧美不卡一卡二卡免费版| 日韩视频在线观看| 国产精品永久免费在线| 麻豆精品视频| 亚洲欧美激情一区二区| 欧美国产在线观看| 欧美一区二区三区免费观看| 在线精品国精品国产尤物884a| 欧美伦理影院| 久久精品亚洲精品国产欧美kt∨| 亚洲日本精品国产第一区| 久久成年人视频| 日韩视频专区| 亚洲国产精品激情在线观看| 国产精品亚洲综合久久| 欧美刺激性大交免费视频| 午夜精品福利一区二区三区av| 亚洲黄色成人久久久| 久久天天躁夜夜躁狠狠躁2022| 日韩午夜av电影| 伊人男人综合视频网| 国产精品日本一区二区| 欧美精品亚洲精品| 鲁大师成人一区二区三区| 午夜精品久久久久久久男人的天堂| 亚洲电影免费观看高清完整版在线观看| 午夜影视日本亚洲欧洲精品| 亚洲人屁股眼子交8| 在线播放日韩欧美| 国产真实乱子伦精品视频| 国产美女诱惑一区二区| 国产精品激情| 国产精品久久97| 国产精品多人|