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++とかに載ってる? いま会社にあるので読めん。

コメント