foolproofなマクロ作れないかな(C++)
STATUS: 故障中
コメント
int nResult = GetObject()->DoSomeThing();
GetObjectメソッドで取って来たオブジェクトのDoSomeThingメソッドを呼び出しているわけですが、オブジェクトがNULLの場合、例外が発生してしまいます。(catchしろよという話はこの際おいとく)
オブジェクトがNULLだった場合、エラー値を返すようなマクロって作れないでしょうか。
概念的にはこんなの。
【マクロ例】
#define SAFEOPE(obj,method,errval) ( obj ? obj->method : errval )
【使用例】
int nResult = SAFEOPE( GetObject() , DoSomeThing() , -1);
うわーダサ。
マクロはマクロで、2回 obj を評価していてかなりヤバメだし、使用例もかっこ悪いことこの上ない。
もっとエレガントな書き方ってないですかね〜。
やっぱ安全のためには、全部参照で返すのがいいのかなあ。
参照の場合、返すべきオブジェクトがなかった場合、普通何を返すのかな。エラー識別用のオブジェクトをstaticとかで生成しておいて、それを返すのかな?
# (more)Effective C++とかに載ってる? いま会社にあるので読めん。