Jeśli mam klasę Base, z co najmniej jedną funkcją wirtualną i klasą Derived, która dziedziczy po niej pojedynczo, to gwarantowane jest (uintptr_t)derived - (uintptr_t)static_cast<Base*>(derived)
(przez Itanium ABI) równe zero, nawet jeśli pochodzi nie jest standardowym układem. Jednak w ogólnym przypadku nie musi to być prawda (np. Wielokrotne dziedziczenie).Cecha typu identyfikująca podstawową klasę bazową
Czy można napisać cechę, za pomocą której można wykryć, czy jedna klasa jest podstawową klasą podstawową innej?
Przydatne sekcje z Itanium ABI:
http://refspecs.linux-foundation.org/cxxabi-1.83.html
klasa Podstawowa baza
Dla klasy dynamicznej, unikalny klasą bazową (jeśli występują), z którymi dzieli wirtualny wskaźnik na przesunięcie 0. Jest to pierwsza (w bezpośredniej klasie bazowej) nie-wirtualna dynamiczna klasa bazowa, o ile istnieje.
klasa dynamiczna
Klasa wymaga wirtualny wskaźnik tabeli (ponieważ lub jego podstawy posiada jedną lub więcej funkcji wirtualnej użytkownika lub klasy wirtualne dolnej).
wyrażenia badanie w ogóle nie pasuje do cytowany definicji. Patrzysz na adres podstawowego obiektu podrzędnego, podczas gdy ABI omawia kolejność wpisów wewnątrz tabeli v. –
@BenVoigt: Ładnie zauważył. Powinniśmy naprawdę mieć link do ABI. –
Jestem niezmiernie ciekawy, w jaki sposób można wykorzystać te informacje. –