[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.〜 ■□■□
# とりあえず、質よりは小技でいいから続けることを目指してみます。
# 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.〜 ■□■□
▼ スレッド
- 120: ■読みやすさの為の利用(嘘っぱちネームスペース) 例えば、Win32 アプリを作っているときは Win3 Wraith the Trickster
- ├121: なんちゃってネームスペース、これイイ。パクらせてもらお。 VC6ではC関数達がnamespace stdに囲 FUKUDA Fumiki
- │└122: あったあった。ISO/IEC14882より: namespace according to the following grammar: namespace-alias: identifier namespace-ali FUKUDA Fumiki
- │ ├126: どっかで見たと思ったら、 プログラミング言語C++第3版 「8.2.7 名前空間の別名」に元記事と ほ Akihiko Matuura
- │ └169: }; ← ここ うに要るんだとばかり思ってました。(x_x) □■□■ Wraith the Trickster □■□■ ■□■ Wraith the Trickster
- │ └174: んー、linkageに影響を及ぼすという点で } // セミコロン不要 と同様に扱うってことじゃないかと FUKUDA Fumiki
- │ └175: } で終わった後ろに何か(識別子)がくっつく可能性がある場合は 要セミコロン、もう終りである Tadafumi Kouzato
- │ └176: なーるほど、説得力あるですねー。きっとコレでしょう。 FUKUDA (episteme) Fumiki -- magical, but never a FUKUDA Fumiki
- └184: こんちは。 namespace Win32 } ってのは論外っすか? _/ ゆーち _/ E-Mail: you-chi‐at‐fsinet.or.jp, you-chi‐at‐nifty.com _ you-chi
- └186: たぶんダメ。 Win32::SetFocus(...) は実際には存在しない のだからリンクエラーがオチでしょうね。 FUKUDA Fumiki
- ├187: SetFocusがマクロもしくはinlineならば運良く助かるだろうけど。 FUKUDA (episteme) Fumiki -- magical, but nev FUKUDA Fumiki
- └189: ああ、おっしゃるとおりっすね。 なんもかんがえとらんな>σ(^_^) _/ ゆーち _/ E-Mail: you-chi@fsinet.o you-chi