所以昨天我問了這個問題private friend operator<< 關於如何讓operator<<
私人的類。我得到了一個非常好的答案, 完全按照我的意願工作,但我還有一些其他問題。私人朋友運營商的代理類<<
首先,我不明白代理類怎麼不一定是朋友private_printable
?我如何可以從operator<<
以內訪問private_printable
的內部成員?
其次,雖然從答案的代碼打,我寫了這個:
operator proxy() const { return *this; }
起先似乎確定了我,它甚至編譯,但是當我運行它,並得到了段錯誤 我意識到,我還沒有爲代理類定義任何構造函數, 將採用private_printable
作爲參數,從而允許轉換。 那麼,我的代碼如何編譯,甚至沒有給我任何警告?
然後我做的第三件事是給代理一個構造函數,它的參數 到private_printable
作爲它的參數(我沒有明確說明)而不是定義轉換運算符。 現在一切正常,除了再次有可能撥打operator<<
在private_printable
。但我不確定,爲什麼發生這種情況。 是因爲ADL嗎?我對此有一些模糊的理解,但我不確定其所有細節。無論如何,proxy
類是私人的,那麼爲什麼 ADL有什麼不同?
再次感謝您的幫助,現在我清楚了:) – jcxz 2013-03-27 16:23:52