国产三区四区_亚洲精品国产精品色欲AV_青青操av在线_黄的网站在线观看_中文字幕无码无遮挡在线看_日韩精品中文字幕吗一区二区

IT之道-艾銻知道

您當(dāng)前位置: 主頁 > IT服務(wù) > 服務(wù)器服務(wù) >

C語言函數(shù) 如何批量處理


2013-11-13 10:43 作者:ly 瀏覽量:

  在用C++寫一個(gè)函數(shù)的時(shí)候,發(fā)現(xiàn)其中需要對(duì)很多個(gè)類似的變量進(jìn)行類似的處理,如:

  if (map.exists(var1.getName()) { process(map.get(var1.getName())); }

  程序中有很多個(gè)類似var的變量,而且都不在數(shù)組中。因此只能一個(gè)個(gè)的使用上述語句進(jìn)行處理。為了簡體代碼,也為了代碼的復(fù)用性,這里想到了4種辦法,各有優(yōu)劣。

  1、定義私有成員函數(shù)

  定義一個(gè)private的成員函數(shù)來處理。由于處理語句較少,為了提高處理效率,這個(gè)私有成員函數(shù)可以定義成inline的。例:

  // @(#) MyClass.h class MyClass ...{ // ...... private: void handle(Type& var) ...{ if (map.exists(var.getName()) ...{ process(map.get(var.getName()); } } }; // @(#) MyClass.cpp void MyClass::Handling(void) ...{ // ...... handle(var1); handle(var2); // ... handle(varn); }

  這是最常見的做法。但使用這個(gè)方法,如果定義成inline函數(shù),則代碼會(huì)出現(xiàn)在頭文件中,沒能很好的隱藏。如果不定義為inline函數(shù),對(duì)效率又有影響。當(dāng)然,優(yōu)點(diǎn)也是顯而易見的,這個(gè)方法最容易想到,這是其一。其二,使用這個(gè)方法,代碼看起來會(huì)比較整潔。

  2、定義當(dāng)前編譯單元內(nèi)的全局函數(shù)

  3、在函數(shù)中定義宏并在使用后取消定義

  在函數(shù)體內(nèi)使用#define定義一個(gè)臨時(shí)的宏進(jìn)行上述處理。,并在處理所有變量之后,函數(shù)結(jié)束前,使用#undefine取消對(duì)該宏的定義。這樣,相當(dāng)于由編譯器展開宏來實(shí)現(xiàn)了這些語句的錄入。例:

  // @(#) MyClass.cpp void MyClass::Handling(void) ...{ // ..... #define __HANDLE(VAR) if (map.Exists(VAR.getName()) Process(map.get(VAR.getName()); __HANDLE(var1); __HANDLE(var2); // ... __HANDLE(varn); #undef __HANDLE }

  這樣雖然把代碼搞得有點(diǎn)不太整潔,但也不失為一個(gè)解決方案,只是——如果在別處也有定義__HANDLE宏,#undefine豈不是把那個(gè)宏取消掉了,會(huì)不會(huì)造成以后的代碼出問題呢?要是能在函數(shù)內(nèi)定義函數(shù)就好了。可惜C++沒有提供在函數(shù)內(nèi)定義函數(shù)的特性,倒是有個(gè)類似的東西——局部類。

  4、定義局部類

  局部類就是定義在函數(shù)內(nèi)部的類。局部類和普通的類相似,但不能擁有靜態(tài)成員。局部類可以訪問其外部函數(shù)中的靜態(tài)變量,但不能訪問其普通變量。如果改用靜態(tài)類,代碼如下:

  // @(#) MyClass.cpp void MyClass::Handling(void) ...{ // ...... class T ...{ public: T(MapType& map) : m_Map(map) ...{} void handle(Type& var) ...{ if (m_Map.exists(var.getName()) ...{ process(m_Map.get(var.getName()); } } private: MapType& m_Map; } t(map); t.handle(var1); t.handle(var2); // ... t.handle(varn); }

  據(jù)說C++的局部類幾本上沒有什么作用。實(shí)際看看上例,也會(huì)啞然失笑。上例只是為了實(shí)現(xiàn)一個(gè)“局部函數(shù)”,定義就寫了一大堆。因?yàn)闆]有做過仔細(xì)的測試,也不知道其效率如何。編譯時(shí)估計(jì)還得為這個(gè)局部類分配空間,實(shí)在有點(diǎn)得不償失。

  艾銻無限是國內(nèi)領(lǐng)先IT外包服務(wù)商,專業(yè)為企業(yè)提供IT運(yùn)維外包、網(wǎng)絡(luò)布線電腦維護(hù)網(wǎng)絡(luò)維護(hù)、辦公設(shè)備維護(hù)、服務(wù)器維護(hù)數(shù)據(jù)備份恢復(fù)、門禁監(jiān)控、網(wǎng)站建設(shè)等多項(xiàng)IT外包服務(wù)。 服務(wù)熱線:400-650-7820 聯(lián)系電話:010-62684652 咨詢QQ:2488237107 地址:北京海淀區(qū)海淀大街38號(hào)銀科大廈 用心服務(wù)每一天,為企業(yè)的發(fā)展提升更高的效率,創(chuàng)造更大的價(jià)值,更多的IT外包信息盡在艾銻無限 http://www.qiaojiaju.cn  

相關(guān)文章

IT外包服務(wù)
二維碼 關(guān)閉
主站蜘蛛池模板: JAPANESE国产中文在线观看 | 亚洲国产成人精品福利无码 | 亚洲免费成人在线 | 久久福利av | 国产香蕉一区二区在线网站 | 国产在线视频2019最新视频 | 不卡国产 | 久久精品中文字幕无码绿巨人 | 国语对白做受XXXXX在线中国 | 极品少妇小泬50PTHEPON | 国产l精品国产亚洲区久久 国产成人8x视频网站入口 | 中文字幕亚洲乱码熟女在线萌芽 | 精品久久久久一区二区国产 | 激情综合五月开心婷婷 | 一区二区三区四区国产免费 | 日韩免费视频一区 | 欧美精品久久凉森玲梦 | 8x在线观看 | www.日本农妇.无码精品 | 牲交欧美兽交欧美 | 人人爽人人爽人人片 | 韩国日本在线观看 | 全免费一级毛片免费看 | 欧美网站免费观看 | 免费的黄 | 18禁裸乳无遮挡啪啪无码免费 | 简单av网 | 毛片软件大全 | 免费观看性欧美大片无片 | 国产中文欧美日韩在线 | 欧美成人视 | 无码ol丝袜高跟秘书在线观看 | 爆乳无码一区二区在线观看 | 国产91精品在线播放 | 2022天天操 | 一级黄色a视频 | 亚洲成色网 | 婷婷中文 | 国产在线观看高清视频 | 在线观看免费视频日韩 | 91久国产 |