Я реализую статический полиморфизм:
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 () снова был закрытым. Можно ли это сделать?
UPDATE:
Я не хочу писать
friend class Base<Derived>;
в классе Derived, поскольку он предоставляет базовый доступ всем членам Derived.