それで昨日私はこの質問をプライベートフレンドオペレーター<<operator<<クラスのためにプライベートに
する方法について尋ねました。私は非常に良い答えを得て、それは私が望むように正確に機能しました、しかし私はそれについていくつかの追加の質問があります。
まず、プロキシクラスが友達である必要がないのはprivate_printableなぜですか?private_printable内部からの内部メンバーにアクセスするにはどうすればよいoperator<<ですか?
第二に、答えからのコードで遊んでいる間、私はこれを書きました:
operator proxy () const { return *this; }
最初は問題ないように見え、コンパイルもしましたが、実行してセグメンテーション違反が発生したとき、プロキシクラスのコンストラクターを定義していないことに気付きましたprivate_printable。これは引数として使用されるため、変換が可能になります。では、警告を出さずにコードをコンパイルするにはどうすればよいでしょうか。
private_printable次に、私が行った3番目のことは、変換演算子を定義する代わりに、引数として参照を持つコンストラクターをプロキシに与えることでした(明示的にはしませんでした)。を呼び出すことが再び可能であったことを除いて、すべてうまくいきoperator<<
ましたprivate_printable。しかし、なぜこれが起こったのか、私にはよくわかりません。ADLのせいですか?私はそれについて漠然とした理解を持っていますが、そのすべての詳細についてはわかりません。とにかく、proxyクラスはプライベートですが、なぜADLが違いを生むのでしょうか。