213 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/26(土) 13:35:49 前に関ったプロジェクトは常にフル指定?でメソッドを呼び出すべし という規約があった 基底クラスのメソッドさえも Hoge::Foo:Base:Dosomething(); 多重継承を多用していたからという事情もあるんだけど 面倒だけど、安全ではあるほほー、fully qualifiedで関数を呼び出す規約ですか。そのプロジェクトでは、ハローワールドは次のようになるんですね。
//これはダメ ADLを使っているから。
std::cout << "Hello,world\n" ;
//これはコーディング規約通りの問題ないコード
std::operator << (std::cout, "Hello,world\n") ;
もちろん、メソッドとは、一般に言えば、単にメンバ関数だけをさすので、普通の関数は含まれないのかも知れぬ。しかしC++にはない用語だ。
しかし、嫌なコーディングスタイルだ。大体、Hoge::Foo:Base:Dosomething()とは、三階層下のメンバ関数ということになる。そんな深いメンバ関数を呼び出す必要のある設計は、果たして正しいのか。確かに、そういう風にスコープ演算子を多用するのは面倒だ。ということは、そもそもscope resolution operator(::)はそんな使い方を想定していないのではないか。すると、この場合の正しい設計は、継承ではなくて、メンバとして持つことじゃなかろうか。そして、access to menber operator(.)で呼べば、そんな無用のタイプで指を疲れさすこともない。
No comments:
Post a Comment