青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
tommy
It's hard to tell the world we live in is either a reality or a dream
posts - 52, comments - 17, trackbacks - 0, articles - 0
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
讀書筆記《C++設計新思維》(5) 編譯期間偵測可轉換性
Posted on 2006-02-05 05:34
Tommy Liang
閱讀(781)
評論(2)
編輯
收藏
引用
所屬分類:
泛型編程與設計模式
就是這樣一個類:
template
<
class
T,
class
U
>
class
Conversion
{
typedef
char
Small;
class
Big
{
char
dummy[
2
]; }
;
static
Small Test(U);
static
Big Test(
);
static
T MakeT();
public
:
enum
{ exists
=
sizeof
(Test(MakeT()))
==
sizeof
(Small) }
;
}
;
關于函數 Small Test(U) 和 Big Test(...) ,書里面說:
。。。需要兩個重載函數,其一如先前所說,接受一個U對象并傳回一個Small對象:
Small Test(U);
但接下來,我該如何寫出一個可接受任何其他種對象的函數呢?。。。。
我覺得這個地方翻譯得有點問題,是不是應該說:“。。我該如何寫出一個可接受任何
另外一種類型(即 T)的
對象的函數呢。?!保驗檫@里就是 T和U嘛, 沒有什么“其他種”,這樣翻譯容易讓我迷惑不解了一會兒。
如果接受 U的那個函數被調用,則T可以被轉換為 U,否則無法轉換,這個是思路的根本。
為什么要做一個 MakeT這樣的函數而不直接使用T呢? 這是為了滿足當 T 只有私有構造函數的情況,對于編譯器來說,sizeof 是在編譯期完成評估的,所以,MakeT 里面到底做了什么并不重要,重要的是他返回的類型,是 T,所以,作者很興奮地說,這是一個 StrawMan function,即“稻草人函數”,哈哈,只是一個樣子而已,但是這已經足夠了,那兩個重載的Test方法也是一樣,這里我們不關心他的函數體。強啊,爽歪歪,快感的源泉啊
測試代碼如下:
using
namespace
std;
cout
<<
Conversion
<
double
,
int
>
::exists
<<
'
'
<<
Conversion
<
char
,
char
*>
::exists
<<
'
'
<<
Conversion
<
size_t, vector
<
int
>
>
::exists
<<
'
'
;
輸出: 1 0 0
double可以轉換為 int
char 不能轉換為 char*
vector<int> 是一個容器的構造函數,size_t 不能轉換,因為這個構造函數是 explicit的,這個地方還是有點迷糊,還得研究一下。
Feedback
#
re: 讀書筆記《C++設計新思維》(5) 編譯期間偵測可轉換性
回復
更多評論
2006-10-10 15:37 by
wanglile
exists = sizeof(Test(MakeT())) == sizeof(Small)
這句,是不是說Test(...)這種函數的優先級是低于類型轉換,所以如果T可以轉換為U類型那Test(...)就變成調用Test(U),于是exists就是true,說明T和可以相互轉換。
#
re: 讀書筆記《C++設計新思維》(5) 編譯期間偵測可轉換性
回復
更多評論
2006-10-11 05:22 by
tommy
這是編譯時邏輯,不是運行時邏輯。
enum { exists = sizeof(Test(MakeT())) == sizeof(Small) };
編譯器根據程序中的代碼調用狀況,決定應該如何編譯template相關的代碼,
在編譯時刻Conversion<T, U>::exists的值就計算出來了,
首先,sizeof(Small) 等于 1,
如果T就是U,或者T可以轉換成U類型(這個就是關鍵),那么 Test(T) 就是Test(U),sizeof就等于sizeof(Small),恒等,意思是
Conversion<T,T>::exists一定是true,類型總是可以轉換成自己。
如果T不是U,并且T不能轉換成U類型,那么static Big Test(...)會被編譯器“調用”(權且用這個詞,編譯原理只學了半桶水,不能裝懂)
,因而exists就是false了(sizeof(Big)!=sizeof(Small),因為2!=1)。
之所以用MakeT這個函數,如作者所說,是為了滿足當 T 只有私有構造函數的情況,編譯器會在編譯時檢查語言的封裝邏輯是否被違反,如果
存在違反情況將出現編譯錯誤,MakeT這個函數就是為了繞過這個檢查而設的,
我的理解是:用于運行時的代碼中也沒有“調用”這個函數,因而MakeT沒有函數體也不會引起連接錯誤,就是編譯通過了。
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
遞歸數查尋表
讀書筆記《C++設計新思維》(8) 邊界標記:NullType和EmptyType
讀書筆記《C++設計新思維》(7) std::type_info類的包裝類
讀書筆記《C++設計新思維》(6) 編譯期間偵測繼承性
讀書筆記《C++設計新思維》(5) 編譯期間偵測可轉換性
讀書筆記《C++設計新思維》(4) Type Selection
讀書筆記《C++設計新思維》(3) Type2Type的意義
讀書筆記《C++設計新思維》(2) Int2Type的意義
讀書筆記《C++設計新思維》(1) Template Template 參數
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © Tommy Liang
日歷
<
2025年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(5)
給我留言
查看公開留言
查看私人留言
隨筆分類
away3d(2)
C++語言與規范(5)
development idea(2)
Unix(1)
讀書筆記《C++圖算法》(3)
泛型編程與設計模式(9)
機器人(1)
進程與線程(3)
數學(2)
隨筆檔案
2015年1月 (1)
2013年8月 (1)
2013年1月 (1)
2012年12月 (1)
2012年5月 (1)
2012年4月 (1)
2012年3月 (1)
2011年11月 (3)
2011年6月 (3)
2011年5月 (1)
2011年3月 (2)
2011年1月 (1)
2010年10月 (1)
2010年9月 (5)
2009年7月 (3)
2009年3月 (2)
2006年4月 (3)
2006年2月 (9)
2006年1月 (2)
2005年12月 (7)
2005年10月 (3)
搜索
最新評論
1.?re: 讀書筆記《C++設計新思維》(3) Type2Type的意義
這2個有什么不同呢。
開銷估計也差不多。
我覺得2者可能的不同還是在可擴展性上面。
--kaso
2.?re: 鄰接表 SparseMultiGRAPH
remove好像不太對吧,我們只是刪一條邊,你的刪了很多呀
--windward
3.?re: 最簡單的堆棧溢出demo
在哪兒有個/gz 啊大哥
--石頭兒
4.?re: 最簡單的堆棧溢出demo
int *eip = (int*)&hackstr[24]; //20->23是EBP
這一行中的[24]應該改成[20]吧,我是arm指令
--nuke
5.?re: 關于C++的 explicit關鍵字
透徹,明白了
--一樣一樣
閱讀排行榜
1.?關于C++的 explicit關鍵字(10030)
2.?四元數入門(8558)
3.?讀書筆記《C++設計新思維》(7) std::type_info類的包裝類(4095)
4.?最簡單的堆棧溢出demo(2670)
5.?Qt moc 的一個詭異提示(2371)
評論排行榜
1.?關于C++的 explicit關鍵字(6)
2.?最簡單的堆棧溢出demo(4)
3.?讀書筆記《C++設計新思維》(1) Template Template 參數(2)
4.?讀書筆記《C++設計新思維》(5) 編譯期間偵測可轉換性(2)
5.?鄰接表 SparseMultiGRAPH(1)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
欧美福利视频
|
欧美三区不卡
|
一区二区三区色
|
亚洲精品一二三区
|
在线中文字幕一区
|
欧美一区二区在线看
|
久久久精品999
|
蜜乳av另类精品一区二区
|
欧美r片在线
|
欧美午夜大胆人体
|
国产在线观看91精品一区
|
永久域名在线精品
|
亚洲人成网站777色婷婷
|
99国产精品私拍
|
午夜视频一区
|
牛夜精品久久久久久久99黑人
|
91久久精品网
|
欧美成人精品一区二区
|
亚洲国产日韩欧美在线图片
|
亚洲精选在线
|
欧美在线亚洲综合一区
|
欧美精品123区
|
国产在线观看精品一区二区三区
|
亚洲精品久久久久久久久
|
亚洲欧美电影在线观看
|
欧美成人精品高清在线播放
|
欧美在线观看一区二区
|
欧美夫妇交换俱乐部在线观看
|
欧美国产高清
|
国产一区在线视频
|
欧美二区视频
|
国产一区二区三区久久
|
欧美va天堂
|
国产一区二区三区久久久久久久久
|
亚洲国产精品一区二区www
|
亚洲天堂成人
|
欧美顶级少妇做爰
|
欧美亚洲综合在线
|
欧美无砖砖区免费
|
91久久国产精品91久久性色
|
性高湖久久久久久久久
|
日韩午夜免费
|
欧美成人精品1314www
|
国产一区自拍视频
|
欧美一区二区三区喷汁尤物
|
a4yy欧美一区二区三区
|
欧美日韩第一区日日骚
|
亚洲国产专区校园欧美
|
久久综合激情
|
久久丁香综合五月国产三级网站
|
国产精品久久久久久av下载红粉
|
亚洲视频你懂的
|
欧美成人免费网站
|
久久精品一区二区三区不卡牛牛
|
国产欧美一区二区三区另类精品
|
亚洲资源在线观看
|
亚洲激情电影中文字幕
|
女生裸体视频一区二区三区
|
激情视频一区二区
|
久久免费少妇高潮久久精品99
|
亚洲综合不卡
|
国产精品视频网站
|
欧美一区二区三区在
|
亚洲欧美国产77777
|
国产精品视频免费观看
|
久久精品成人
|
久久国产精品99国产
|
狠狠色丁香婷婷综合久久片
|
久久久国产91
|
玖玖玖国产精品
|
亚洲伦理在线观看
|
日韩午夜三级在线
|
国产精品美女999
|
欧美在线在线
|
久久久久久久综合狠狠综合
|
亚洲高清在线播放
|
日韩视频不卡
|
国产精品亚洲综合天堂夜夜
|
久久国产视频网站
|
亚洲激情在线观看视频免费
|
亚洲国产黄色
|
欧美不卡三区
|
欧美精品一区二区在线播放
|
亚洲专区一区
|
久久嫩草精品久久久精品
|
亚洲国产一区在线
|
亚洲人体偷拍
|
国产精品一区二区黑丝
|
久久久免费精品视频
|
免费日本视频一区
|
亚洲综合视频一区
|
久久精品人人做人人综合
|
亚洲精品免费在线观看
|
中日韩美女免费视频网址在线观看
|
国产精品人成在线观看免费
|
久久中文字幕一区
|
欧美日韩国产综合久久
|
久久国产精品99国产
|
欧美va亚洲va国产综合
|
亚洲欧美中日韩
|
久久免费精品日本久久中文字幕
|
欧美专区在线观看一区
|
国产精品久久久久国产a级
|
米奇777在线欧美播放
|
久久久久.com
|
亚洲高清自拍
|
欧美色欧美亚洲另类二区
|
久久嫩草精品久久久精品一
|
欧美激情一区二区三区
|
久久精品在这里
|
欧美日韩一区二区三区
|
欧美xx视频
|
国产午夜精品全部视频在线播放
|
国产精品成人国产乱一区
|
久久综合999
|
国产精品美腿一区在线看
|
欧美国产精品人人做人人爱
|
国产精品一区二区久久久久
|
亚洲黄色大片
|
亚洲国产精品999
|
欧美在线免费视频
|
欧美一区二区三区的
|
欧美理论视频
|
亚洲国产毛片完整版
|
在线观看日韩www视频免费
|
午夜欧美视频
|
欧美一区2区三区4区公司二百
|
韩国视频理论视频久久
|
国产精品99久久久久久人
|
亚洲美女黄网
|
欧美韩日一区二区三区
|
亚洲成人资源
|
亚洲黑丝一区二区
|
久久久夜色精品亚洲
|
久久国产乱子精品免费女
|
欧美激情精品久久久久久
|
久久色在线观看
|
男女av一区三区二区色多
|
国产精品porn
|
久久九九免费视频
|
国产欧美一区二区色老头
|
中文在线一区
|
午夜精品久久久
|
国产女主播一区二区三区
|
亚洲自拍偷拍视频
|
久久超碰97中文字幕
|
国产亚洲欧美一区二区
|
久久久精品动漫
|
亚洲电影在线看
|
亚洲人久久久
|
欧美日韩国产成人在线91
|
99国产精品
|
欧美一区在线看
|
国精品一区二区三区
|
久久久久久穴
|
亚洲人成在线播放网站岛国
|
99av国产精品欲麻豆
|
欧美日韩在线一区
|
亚洲图片激情小说
|
久久精品视频va
|
亚洲激情欧美
|
欧美三级乱码
|
久久激情视频免费观看
|
欧美激情aⅴ一区二区三区
|
av成人免费
|
国产亚洲一区二区三区在线播放
|
久久久国产精品一区
|
亚洲欧洲在线看
|
欧美怡红院视频
|
在线观看成人网
|
欧美日韩亚洲三区
|
久久国产成人
|
一区二区毛片
|
欧美成年人网站
|
亚洲免费伊人电影在线观看av
|
国产一区二区三区高清播放
|
欧美成人免费大片
|
小辣椒精品导航
|
日韩视频一区二区在线观看
|
久久av一区二区
|
日韩视频一区二区三区
|
国产区精品在线观看
|
欧美另类亚洲
|
久久久久国色av免费观看性色
|
亚洲区在线播放
|
美女免费视频一区
|
亚洲一区尤物
|
亚洲精品色图
|
国产专区欧美精品
|
国产精品高潮在线
|
欧美精品不卡
|
久久久久久91香蕉国产
|
亚洲网站啪啪
|
亚洲蜜桃精久久久久久久
|
免费久久99精品国产自
|
久久激情五月激情
|
午夜精品区一区二区三
|
一本色道久久
|
亚洲精品美女久久7777777
|
国内激情久久
|