pointers_to_members
Określonego język C++
Określa, czy wskaźnik do członka klasy może być zadeklarowany przed jego definicją skojarzonej klasy i jest używany do kontroli rozmiaru wskaźnika i kodu wymaganych do interpretacji wskaźnika.
#pragma pointers_to_members( pointer-declaration, [most-general-representation] )
Uwagi
Możesz umieścić pragmę pointers_to_members w pliku źródłowym, jako alternatywę użycia opcji kompilatora /vmx lub słów kluczowych dziedziczenia.
Argument pointer-declaration określa, czy został zadeklarowany wskaźnik do członka przed czy po definicji funkcji skojarzonej.Argument pointer-declaration jest jednym z dwóch następujących symboli:
Argument |
Komentarze |
---|---|
full_generality |
Generuje kod bezpieczny, czasem mało optymalny.Możesz użyć full_generality, jeżeli zadeklarowano dowolne wskaźniki do członka przed zdefiniowaniem skojarzonej klasy.Ten argumentu zawsze używa reprezentacji wskaźnika określonej przez argument most-general-representation.Zapis jest równoważny zapisowi /vmg. |
best_case |
Generuje kod bezpieczny, optymalny przy użyciu reprezentacji najlepszego przypadku dla wszystkich wskaźników do członków.Wymaga definiowania klasy przed zadeklarowaniem wskaźnika do członka klasy.Wartością domyślną jest best_case. |
Argument most-general-representation określa reprezentację najmniejszego wskaźnika, który kompilator może bezpiecznie używać odwołania do dowolnego wskaźnika do członka klasy w jednostce tłumaczenia.Argument może być dowolnym z następujących:
Argument |
Komentarze |
---|---|
single_inheritance |
Najbardziej ogólną reprezentacją jest pojedyncze dziedziczenie, wskaźnik do funkcji składowej.Powoduje błąd, jeśli model dziedziczenia definicji klasy, do której zgłaszany jest wskaźnik do członka jest wielokrotny lub wirtualny. |
multiple_inheritance |
Najbardziej ogólną reprezentacją jest wielokrotne dziedziczenie, wskaźnik do funkcji składowej.Powoduje błąd, jeśli model dziedziczenia definicji klasy, do której zgłaszany jest wskaźnik do członka jest wirtualny. |
virtual_inheritance |
Najbardziej ogólną reprezentacją jest wirtualne dziedziczenie, wskaźnik do funkcji składowej.Nigdy nie powoduje błędu.Jest to argument domyślny, gdy jest używane #pragma pointers_to_members(full_generality). |
![]() |
---|
Radzimy umieścić pragmę pointers_to_members tylko w pliku kodu źródłowego, na który chcesz mieć wpływ i tylko po dowolnej dyrektywie #include.Praktyka ta zmniejsza ryzyko, że pragma wpłynie na inne pliki i która przypadkowo określi wiele definicji dla tej samej zmiennej, funkcji lub nazwy klasy. |
Przykład
// Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )