Warum schlägt die geschützte Vererbung bei dynamic_cast fehl?

Ich habe meine C ++ - Basisklasse in geändertprotected Erbschaft und meinedynamic_cast(s) aufgehört zu arbeiten.

Warum sollte die Vererbung in geändert werden?protected ändere das Verhalten vondynamic_cast?

struct Base {
  static Base *lookupDerived(); // Actually returns a Derived * object.
};

struct Derived : protected /* Switch this to public to get it working */ Base {
 static void test() {
   Base *base = lookupDerived();

   if (dynamic_cast<Derived *>(base)) {
      std::cout << "It worked (we must be using public inheritance)." << std::endl;
   } else {
      std::cout << "It failed (we must be using protected inheritance)." << std::endl;
   }
};

Antworten auf die Frage(3)

Ihre Antwort auf die Frage