[cppll:0120] <tips> namespace fake

Subject:
[cppll:0120] <tips> namespace fake
From:
Wraith the Trickster <wraith@...>
Date:
Fri, 14 Dec 2001 12:35:22 +0900
X-Mailer:
Microsoft Outlook Express 5.50.4807.1700
Message-Id:
<006f01c18450$655b0ac0$0cacc63d@mist>
道化師です。

# とりあえず、質よりは小技でいいから続けることを目指してみます。
# 9割の tips はダメダメでも、1割でもいいものをお伝えできれば、
# と言う方向で。みなさんもどんどん tips を投稿しちゃいましょう、
# 自分では大したことないと思っていてもそれを知らない人にとって
# は貴重な情報となるかもしれません。下手な鉄砲数打ちゃ当たる。
#
# ...本当に下手な鉄砲は数打っても当たらんらしいが。(^^;

今日はネームスペースの小技について。

■読みやすさの為の利用(嘘っぱちネームスペース)
例えば、Win32 アプリを作っているときは Win32API をラップしただ
けの同名の関数とラップしていない素の API をごちゃ混ぜにして使う
ことが結構あるかと思いますが、そんな時に素の API をそれだとわか
りやすくするために...

 #define Win32API

....なんてマクロを用意して...

 Win32API::SetFocus(hWnd);

....などと記述したりしてます。


■切り替えの為の利用 其の壱

 #ifdef _DEBUG
   namespace DebugSpace {
     HGLOBAL GlobalAlloc(UINT uFlags, DWORD dwBytes);
     HGLOBAL GlobalFree(HGLOBAL hMem);
     ...
   };
 #else // #ifdef _DEBUG
   ...
 #endif // #ifdef _DEBUG

....などのようなメモリリークのチェックの為にデバッグバージョンで
はメモリ関連の関数(API)をラップした関数郡をネームスペース内に用
意し、リリースバージョンでは...

 #ifdef _DEBUG
   ...
 #else // #ifdef _DEBUG

 #define DebugSpace

 #endif // #ifdef _DEBUG

....のように定義しておくことで素の関数(API)が呼ばれるです。

■切り替えの為の利用 其の弐

 namespace BasicHoge {
   ... 堅実なバージョンの関数セット ...
 };

 namespace HighPerformanceHoge {
   ... BasicHoge と同じレパートリーの
       高速なバージョンの関数セット ...
 };

 namespace VerifyHoge {
   ... BasicHoge と HighPerformanceHoge の両方を呼び出し
       結果が違えば警告を行うバージョンの関数セット ...
 };

 #ifdef _DEBUG

 #define Hoge VerifyHoge

 #else // #ifdef _DEBUG

 #define Hoge HighPerformanceHoge

 #endif // #ifdef _DEBUG

□■□■                  Wraith the Trickster                  □■□■
■□■□ 〜I'll go with heaven's advantage and fool's wisdom.〜 ■□■□

スレッド

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here