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