class A {
public:
A() {auto tmp = &A::foo;}
protected:
void foo() {}
};
class B : public A {
public:
B() {auto tmp = &A::foo;}
};
Klasse A
kompiliert kein Problem. Klasse B
ergibt sich ein Übersetzungsfehler:Warum ist es unmöglich, einen Zeiger auf eine geschützte Methode der Basisklasse zu erhalten?
'A::foo' : cannot access protected member declared in class 'A'
Warum ist das, was ist der Grund? Gibt es eine Möglichkeit, dies zu umgehen (wenn ich diesen Zeiger für einen Rückruf benötige, std::function
usw.)?
„* Vermutlich zur Sicherheit *“ - es gibt viele Möglichkeiten Zeiger auf ein Element zu jedermann geben – SomeWittyUsername