91av免费观看_日韩视频在线免费看_日本xxxx色视频在线观看免费_伊人222综合网图片_国产二区三区在线_91麻豆麻豆

IT之道-艾銻知道

您當前位置: 主頁 > IT服務 > 服務器服務 >

C語言函數 如何批量處理


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

  在用C++寫一個函數的時候,發現其中需要對很多個類似的變量進行類似的處理,如:

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

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

  1、定義私有成員函數

  定義一個private的成員函數來處理。由于處理語句較少,為了提高處理效率,這個私有成員函數可以定義成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); }

  這是最常見的做法。但使用這個方法,如果定義成inline函數,則代碼會出現在頭文件中,沒能很好的隱藏。如果不定義為inline函數,對效率又有影響。當然,優點也是顯而易見的,這個方法最容易想到,這是其一。其二,使用這個方法,代碼看起來會比較整潔。

  2、定義當前編譯單元內的全局函數

  3、在函數中定義宏并在使用后取消定義

  在函數體內使用#define定義一個臨時的宏進行上述處理。,并在處理所有變量之后,函數結束前,使用#undefine取消對該宏的定義。這樣,相當于由編譯器展開宏來實現了這些語句的錄入。例:

  // @(#) 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 }

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

  4、定義局部類

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

  // @(#) 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); }

  據說C++的局部類幾本上沒有什么作用。實際看看上例,也會啞然失笑。上例只是為了實現一個“局部函數”,定義就寫了一大堆。因為沒有做過仔細的測試,也不知道其效率如何。編譯時估計還得為這個局部類分配空間,實在有點得不償失。

  艾銻無限是國內領先IT外包服務商,專業為企業提供IT運維外包、網絡布線電腦維護網絡維護、辦公設備維護、服務器維護數據備份恢復、門禁監控、網站建設等多項IT外包服務。 服務熱線:400-650-7820 聯系電話:010-62684652 咨詢QQ:2488237107 地址:北京海淀區海淀大街38號銀科大廈 用心服務每一天,為企業的發展提升更高的效率,創造更大的價值,更多的IT外包信息盡在艾銻無限 http://www.richjn.cn  

相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 成人午夜精品久久久久久久网站 | 国语对白做受XXXXX在线中国 | 国产精品久久人妻拍拍水牛影视 | 日韩av无码一区二区三区不卡毛片 | 激情射精爆插热吻无码视频 | 久色网| 久久久无码精品亚洲日韩 | www.四虎在线 | 欧洲精品色在线观看 | 亚洲AV永久无码精品一区二区 | 亚洲国产AV无码男人的天堂 | 8x成人网| 3344很色.com | 亚洲日本欧美日韩中文字幕 | 给老师下药挺进她的身体 | 国产gay高中生小鲜肉屁股 | 性一交一乱一乱一视频 | 最近免费中文mv在线字幕 | 久久天天躁狠狠躁夜夜 | 无码高潮少妇毛多水多水免费 | 欧美天天澡天天爽日日A | 女人的超长巨茎人妖在线视频 | 无套内谢孕妇毛片免费看看 | 人妻丝袜AV中文系列先锋影音 | 领导边摸边吃奶边做爽在线观看 | 亚洲国产成人无码网站大全 | 夜夜夜夜夜夜爽噜噜噜噜噜噜 | 亚洲国产精品无码一线岛国 | 最新的国产成人精品2021 | 人妻丝袜AV中文系列先锋影音 | 小荡货腿张开让我cao爽视频 | 老太婆性杂交视频 | 天天躁日日躁狠狠躁超碰97 | 精品国产免费一区二区三区香蕉 | 欧美视频在线观看一区二区 | 最新国产在线观看 | 亚欧无码AV在线观看 | 一二三四观看视频社区在线 | 日韩综合夜夜香内射 | 日本一区二区更新不卡 | 人人妻人人妻人人人人妻人人 |