【发布时间】:2019-10-12 08:01:52
【问题描述】:
我正在实现一个静态多态性:
template<typename T>
class Base {
public:
void method() {
// do something
impl();
// do something else
}
void impl() { // intended to be private
static_cast<T*>(this)->impl();
}
};
class Derived : public Base<Derived> {
public:
void impl() { // intended to be private
}
};
这段代码是动态多态类的静态实现,其中 void impl() 是虚拟的和私有的。
我已经实现了多态性(静态)。但是我必须将方法 void impl() 公开,以便允许从基类访问它。我希望方法 void impl() 再次成为私有的。能做到吗?
更新: 我不想写了
friend class Base<Derived>;
在 Derived 类中,因为它允许 Base 访问 Derived 的所有成员。
【问题讨论】:
-
您可以将
friend class Base<Derived>添加到Derived类中。 -
我认为这通常是过度设计,但如果您认为朋友船太多,您可以使用 attorney-client idiom 完善友谊。
-
我附上了我的答案以反映您的建议,@Oliv
标签: c++ crtp static-polymorphism