今天我来讨论一下,是否需要明确声明内部的类/结构体的friend访问权限。这是相关的(复制的样例)代码:
我注意到代码编译得很好,我原以为在Implementation类中需要一个
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。