pointers_to_members
Specifické pro jazyk C++
Určuje, zda ukazatel na člen třídy lze deklarovat před definicí jeho přidružené třídy a slouží k řízení velikosti ukazatele a kódu potřebného k interpretaci tohoto ukazatele.
#pragma pointers_to_members( pointer-declaration, [most-general-representation] )
Poznámky
Direktivu pragma pointers_to_members lze do zdrojového souboru umístit jako alternativu k použití možnosti kompilátoru /vmx nebo klíčových slov dědičnosti.
Argument pointer-declaration určuje, zda je nutné ukazatel na člen deklarovat před nebo po definici přidružené funkce.Argument pointer-declaration je jedním ze dvou následujících symbolů:
Argument |
Komentáře |
---|---|
full_generality |
Generuje bezpečný, někdy neoptimální kód.Symbol full_generality lze použít, pokud je jakýkoli ukazatel na člen deklarován před definicí přidružené třídy.Tento argument vždy používá reprezentaci ukazatele určenou argumentem most-general-representation.Ekvivalentní možnosti /vmg. |
best_case |
Generuje bezpečný, optimální kód, který používá nejlepší reprezentaci pro všechny odkazy na členy.Vyžaduje definování třídy před deklarací ukazatele na člena této třídy.Výchozí hodnota je best_case. |
Argument most-general-representation určuje nejmenší reprezentaci ukazatele, který kompilátor může bezpečně použít pro odkazování na jakéhokoli ukazatele na člena třídy v jednotce převodu.Tento argument může nabývat kterékoliv z těchto hodnot:
Argument |
Komentáře |
---|---|
single_inheritance |
Nejobecnější reprezentace je jediná dědičnost, ukazatel na členskou funkci.Způsobí chybu, je-li model dědičnosti definice třídy, pro kterou je ukazatel na člen deklarován, vícenásobný nebo virtuální. |
multiple_inheritance |
Nejobecnější reprezentace je vícenásobná dědičnost, ukazatel na členskou funkci.Způsobí chybu, je-li model dědičnosti definice třídy, pro kterou je ukazatel na člen deklarován, virtuální. |
virtual_inheritance |
Nejobecnější reprezentace je virtuální dědičnost, ukazatel na členskou funkci.Nikdy nezpůsobí chybu.Toto je výchozí argument, pokud je použita direktiva #pragma pointers_to_members(full_generality). |
Upozornění |
---|
Direktivu pragma pointers_to_members používejte pouze v souboru zdrojového kódu, který chcete ovlivnit a až po všech direktivách #include.Touto praxí snížíte riziko, že tato direktiva pragma ovlivní další soubory a že bude náhodně zadáno více definic pro stejnou proměnnou, funkci nebo název třídy. |
Příklad
// Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )