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さんにもいろいろと助言・協力等を頂きました。この場を借りてお礼申し上げたいと思います。