friend class に特定関数をpublic公開、まとめ
class A; class B { public: private: class C { public: friend class A; friend class B; private: T hoge(...)const;//メソッドだけを公開するのでそもそもconst } C c_; public: const C& get_c()const{return c_;} };
みたいなコードがありますが、c自体のインスタンスは作れるんですよね(decltype(get_c()) c;<-private関係なく作れる)。
で、これの予防のために、コンストラクタをprivateにしたり云々でインスタンスの生成をA,B,C内でしか作れないようにすることも可能です。まぁ、外部でできたとしても構わないので好みの問題ですね。
A,B内でCを一杯作れるのが何故か気に食わなくて、他の実装方法も考えてみたのですが、他のは役に立ちませんでした。
具体的にはbooost::function等を使ってprivateな関数の関数オブジェクトを返すというものですが、関数オブジェクトからはprivateな物も呼び出せてしまうので、これまだどうにかなるものではなかったですw。
まとまっていませんが、個人的にまとめようとしていた内容はこの程度かなぁと。今回の実験には、すばるさんやnagoya313さんにもいろいろと助言・協力等を頂きました。この場を借りてお礼申し上げたいと思います。