今天我已經過了一些討論,無論是否需要明確聲明friend
訪問內部class
/struct
。這裏是(複製樣本)代碼的問題:內部結構/類聲明是否自動成爲嵌套類的朋友?
struct Interface
{
virtual void foo() = 0;
virtual ~Interface() {}
};
class Implementation
{
struct InterfaceImpl : Interface
{
InterfaceImpl(Implementation* impl)
: impl_(impl) {}
virtual void foo()
{
impl_->doFoo(); // << Here's what's in question!!
}
Implementation* impl_;
};
public:
Implementation()
: interfaceImpl_(this) {}
Interface* getInterface() { return &interfaceImpl_; }
private:
InterfaceImpl interfaceImpl_;
void doFoo() {}
};
int main() {
Implementation impl;
return 0;
}
我已經注意到,該代碼編譯好了,在這裏我想這將是必要的Implementation
類有friend struct InterfaceImpl;
讓它工作。所以下面的設置都可以正常工作:c++11,GCC 4.8.1,GCC 4.3.2。
投票停止專門因爲你**要求**重新打開你自己的問題。 – chrylis
@πάνταῥεῖ我不太確定這是如何不同於愚蠢的......你會介意告訴我嗎? – hichris123
我要求重新開放這個問題,因爲(對付這個問題)它鞏固了所有的標準問題(並且提到了GCC的例外[我一直在標註!!])很好!它主要與給定的標籤(相關性)不同,並且它的關係解釋了GCC 4.3.2行爲的特殊行爲。 –