[原創(chuàng)文章歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息]
Justin 于 2009-12-09
Item15告訴我們這個(gè)世界是現(xiàn)實(shí)的,有人往左就有人往右。為了保證更多的人能用好你的代碼,在使用對(duì)象管理資源的同時(shí)也要留出接口給那些需要繞過(guò)對(duì)象而直接訪問(wèn)資源的人。(我個(gè)人是不太情愿這樣做……)
??? ?
方法說(shuō)起來(lái)是相當(dāng)?shù)暮?jiǎn)單:寫(xiě)個(gè)函數(shù)暴露出指向資源的指針就可以。書(shū)里講得更多的是用怎樣的函數(shù):
可以實(shí)現(xiàn)一個(gè)get函數(shù),或是*、->運(yùn)算,返回指向資源的指針。這個(gè)叫做顯式轉(zhuǎn)換(explicit conversion)
也可以實(shí)現(xiàn)一個(gè)隱式的轉(zhuǎn)換函數(shù)(implicit conversion),這里要抄一下完整的代碼,僅僅因?yàn)槲覜](méi)有讀過(guò)也沒(méi)有寫(xiě)過(guò)這樣的轉(zhuǎn)換函數(shù)。但是個(gè)人覺(jué)得實(shí)際工作中應(yīng)該是不提倡這樣做的,因?yàn)殡[式的轉(zhuǎn)換極有可能發(fā)生在編程者沒(méi)有意識(shí)的情況下,導(dǎo)致后面的代碼出錯(cuò)。
上面代碼的應(yīng)用如下,f本身為Font類(lèi)型,(changeFontSize第一個(gè)參數(shù)為FontHandle),但是由于隱式轉(zhuǎn)換,類(lèi)型變成了FontHandle。
回頭看這個(gè)Item的重點(diǎn):做人留一線,日后好相見(jiàn)。為了能兼容更多的API,大師認(rèn)為需要留出接口提供對(duì)資源的直接訪問(wèn)。
Justin 于 2009-12-09
Item15告訴我們這個(gè)世界是現(xiàn)實(shí)的,有人往左就有人往右。為了保證更多的人能用好你的代碼,在使用對(duì)象管理資源的同時(shí)也要留出接口給那些需要繞過(guò)對(duì)象而直接訪問(wèn)資源的人。(我個(gè)人是不太情愿這樣做……)
??? ?
方法說(shuō)起來(lái)是相當(dāng)?shù)暮?jiǎn)單:寫(xiě)個(gè)函數(shù)暴露出指向資源的指針就可以。書(shū)里講得更多的是用怎樣的函數(shù):
可以實(shí)現(xiàn)一個(gè)get函數(shù),或是*、->運(yùn)算,返回指向資源的指針。這個(gè)叫做顯式轉(zhuǎn)換(explicit conversion)
也可以實(shí)現(xiàn)一個(gè)隱式的轉(zhuǎn)換函數(shù)(implicit conversion),這里要抄一下完整的代碼,僅僅因?yàn)槲覜](méi)有讀過(guò)也沒(méi)有寫(xiě)過(guò)這樣的轉(zhuǎn)換函數(shù)。但是個(gè)人覺(jué)得實(shí)際工作中應(yīng)該是不提倡這樣做的,因?yàn)殡[式的轉(zhuǎn)換極有可能發(fā)生在編程者沒(méi)有意識(shí)的情況下,導(dǎo)致后面的代碼出錯(cuò)。
class?Font?{
public:
//??..
//?implicit?conversion?function
??operator?FontHandle()?const?{?return?f;?}
//??..
};
public:
//??..
//?implicit?conversion?function
??operator?FontHandle()?const?{?return?f;?}
//??..
};
上面代碼的應(yīng)用如下,f本身為Font類(lèi)型,(changeFontSize第一個(gè)參數(shù)為FontHandle),但是由于隱式轉(zhuǎn)換,類(lèi)型變成了FontHandle。
Font?f(getFont());
int?newFontSize;
//..
//?implicitly?convert?Font?to?FontHandle
changeFontSize(f,?newFontSize);?
int?newFontSize;
//..
//?implicitly?convert?Font?to?FontHandle
changeFontSize(f,?newFontSize);?
回頭看這個(gè)Item的重點(diǎn):做人留一線,日后好相見(jiàn)。為了能兼容更多的API,大師認(rèn)為需要留出接口提供對(duì)資源的直接訪問(wèn)。


