欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 亚洲视频免费在线 | 精品久久久久久久久久 | 久久久久久亚洲 | 艹逼网 | 国产日韩一区二区 | 久久久久久综合 | 黄色资源在线 | 免费高清欧美一区二区视频 | 国产在线看片 | 奇米影视555 | 中文乱码一二三四有限公司 | 欧美日韩在线观看视频 | 久久草资源费视频在线观看 | 国产高清一区二区 | 精品福利在线视频 | 男女啪啪免费观看无遮挡动态图片 | 4hu44四虎在线观看 | 日韩在线精品 | 99久久免费费视频在线观看 | 国产日韩精品久久 | 六月色播 | 欧美久草 | 欧美日韩一区精品 | 日韩卡1卡2 卡三卡2021老狼 | 国产探花在线精品一区二区 | 欧美亚洲高清 | 无码免费一区二区三区免费播放 | 夜夜嘿视频免费看 | 国产一区二区在线看 | 久热久热| 黄色a视频 | 国产亚洲一级精品久久 | 精品国产一区二区国模嫣然 | 欧美大码毛片在线播放 | 国产精品视频999 | 精品国产九九 | 久久综合一区二区 | 国产欧美日本 | 日本人成年视频在线观看 | 日韩中文字幕网站 | 欧美激情精品久久久久久 |