ゆとりーなの日記

日記的な事を書いて行くと思はれる

お友達の扱いは慎重に

ふとしたことがきっかけで、とある名前空間のメソッドに対してのみ公開するprivateメンバとかできるとうれしいなとか思いました。

class Hoge {
 private:
  friend namespace Foo;
}

namespace Foo {
// ここの関数はHogeのprivateメンバにアクセスできる。
}

でもこれ、名前空間の関数はユーザーコードで任意に追加できるのでカプセル化超絶破壊であることに気づきました。残念。
続いて、普通のfirend関数に関する要望。とある関数fooがクラスHogeのfirendだった場合、privateメンバに自由にアクセスできますが、firendな関数やクラスでもアクセス出来ないクラス領域があってもいい気がします。
例えばとある関数fooにのみ公開したいprivate変数があるけど、こいつへのアクセスはfooからでもアクセッサを介させたいという場合とか結構あると思います。この手のアクセッサは当然privateなメソッドになるわけですが、private変数に対しpublicアクセッサで常にアクセスする場合と違って、間違ってprivate変数に直接アクセスしてしまった場合にコンパイラ先生がエラーを吐いてくれません。もし、friendでもアクセスできないスペシャルprivateゾーンなるものがあるとしたら、ここにその変数を置いておけば、間違えてfriend関数がアクセッサを介せずに直接変数を触ろうとした時にコンパイラ先生がはじけるという意味で幸せになれるような気がするのですが気のせいでしょうか。