欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

巧用成員模板函數為你的類留下后門

系統 2217 0
?
巧用成員模板函數為你的類留下后門
如果你的類需要擴展功能,除了修改源碼之外,你也可以從這個類派生一個類來對這個類作擴充。比如有如下一個類。
class cls
{
public :
??? int fun( int a)
??? {
?????? // 一些處理
?????? return 0;
??? }
};
類cls有一個函數fun能針對一個 int 型的數據進行一些必要的動作。現在假如,要對這個cls類進行功能擴充。讓它能針對一個 double 型的數據進行一些動作。第一種擴充方法是修改類的源碼如下:
class cls
{
public :
??? int fun( int a)
??? {
?????? // 一些處理
?????? return 0;
??? }
??? int fun( double a)
??? {
?????? // 一些處理
?????? return 0;
??? }
};
經過對類cls源碼的修改,cls現在有了針對的 double 功能了。可是這種改源碼的方法。會影響到其它的使用到這個cls類的地方。為了降低這種影響,可以采用從cls類再派生新類的做法,如下:
class cls2: public cls
{
public :
??? int fun( double a)
??? {
?????? // 一些處理
?????? return 0;
??? }
?
};
經過對派生,現在cls2這個類擴展了cls的功能。現在cls2可以針對 int double 兩種數據類型而做必要的處理了。可是這種通過派生新類的擴展,不能使以前就使用cls的用戶直接從中受益。這些用戶想要使用這個新擴展的功能,就必需修改自己的代碼來,添加對cls2的適應。
如果象上面的這種功能擴充,要是進行多幾次的話,采用第一種方法,就會經歷多次cls類的代碼修改,采用第二種方法,就會產生多次派生過程。象cls3,cls4等等。而且采用第二種方法還有一個非常大的不足。那就是派生類不能訪問基類的私有成員。假如擴充出來的功能在進行處理時要對cls中的一些私有成員有所依賴,就不能采用第二種擴展方法。
從以上的弊端來看,這兩種功能擴展的方法都不是好方法。
下面我們再來說一種進行功能擴展的方法。要采用這種方法,就需要在cls類在設計時就留出擴展口。現在我們重新設計cls類如下:
class cls
{
public :
??? // 把要傳入的數據的地址轉為void型的,
??? // 用type來表明進行處理時要對arg進行什么樣的轉換
??? int fun( void * arg, int type)
??? {
??? ??? switch (type)
?????? {
?????? case 0:
?????????? // 做針對int型數據的處理
?????????? break ;
?????? default :
?????????? break ;
?????? }
?????? return 0;
??? }
};
經過重新設計的cls類,現在要進行功能擴展的話,只需要在它的函數fun中多加一條 case 就行了,很方便了。但是這樣的設計是脆弱的。函數fun的兩個參數arg和type,非常的不安全,很容易出現搭配錯誤。看來我們還要尋找更好的辦法。于是我們再次修改我們的cls類如下:
class cls
{
public :
??? template < typename T>
??? int fun( T& arg)
??? {
?????? // 一些處理
?????? return 0;
??? }
};
這一次的cls類的模板成員函數fun,可以經得起功能擴充了。擴充它的途徑是特化這個成員模板函數。例如現在要對cls進行針對 double 的處理的擴展,只需對fun進行double類型的特化如下。
template <>
int cls::fun( double & arg)
{
??? // 針對double的一些處理
??? return 0;
}
特化的過程沒有動過cls類的一分一毫,也沒有從cls派生任何新類。但我們的 功能擴展卻安全的完成 了。這才是我們想要的方便的,安全的功能擴展方法。
?
?
? 讓后門支持偏特化

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1546360


巧用成員模板函數為你的類留下后門


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 丁香五月亚洲综合在线 | 国产亚洲精品一区二区 | 亚洲成a人片在线看 | 亚洲一区二区免费 | 夜色视频网 | 免费国产一区 | 亚欧精品一区二区三区四区 | 97久久国语露脸精品对白 | 久草手机在线播放 | 在线中文字幕亚洲 | 亚洲乱码在线卡一卡二卡新区 | 精品一区二区三区在线观看 | 日韩中文一区二区三区 | 加勒比婷婷色综合久久 | 成人免费黄色 | 国产自啪啪 | 久久精品首页 | 99热久久这里只有精品6国产网 | 伊人a.v在线 | 草莓视频69 | 欧美成人26uuu欧美毛片 | 鲍莉 | 网站午夜| 欧美影院在线 | 国产97色在线 | 日韩 | 大毛片 | 国产区在线 | 久久99免费观看 | a级毛片高清免费视频 | 奇米影视亚洲四色8888 | 亚洲精品二三区 | 日本久久精品 | 波多野一区二区三区在线 | 久久大香香蕉国产免费网站 | 夜夜撸天天操 | 欧美性猛交一区二区三区精品 | 国产成人在线视频 | 久久中文字幕在线 | 国产免费小视频在线观看 | 麻豆精品在线观看 | 国产一级毛片午夜福 |