【发布时间】:2011-10-26 08:23:31
【问题描述】:
由于某些原因,我想写这样的代码:
template<class T>
class C : public T
{
friend class T;
};
我认为代码很清楚。我想要一个类模板,它定义一个派生自作为模板参数传递给它的类的类,并且为了使事情更复杂一点,我想将基类定义为派生类的朋友。 MSVC 编译器的代码似乎没问题,但 GNU C++ 编译器抱怨很多。我应该怎么做才能拥有所需的功能?
【问题讨论】:
-
如果你是从它派生的,为什么要交朋友?
-
GCC 具体说了什么?
-
@Nim:例如,您可能正在使用 CRTP 来实现模拟动态绑定,并且您想要一个私有虚拟函数的等价物。也就是说,从基类调用但不需要是
class C的公共接口的一部分的函数。你可以说,“好吧,它不需要是私有的,只是不允许公众使用它”,这是真的,但是当你告诉他们时,有些人会非常激动(除了禁用默认副本) C++ 中的访问修饰符完全是浪费时间,您应该始终公开所有内容;-) -
@Nim:我想使用 Steve Jessop 提到的 CRTP。
-
@OliCharlesworth:它抱怨朋友关键字使用不正确,比如缺少类键。