pointers_to_members pragma

C++ 专用

指定是否可以在其关联类定义之前声明指向该类成员的指针。 用于控制指针大小和解释指针所需的代码。

语法

#pragma pointers_to_members( best_case )
#pragma pointers_to_members( full_generality [ , most-general-representation ] )

备注

可以在源文件中放置 pointers_to_memberspragma,作为使用 /vmb/vmg/vmm/vms/vmv 编译器选项或 Microsoft 特定继承关键字的替代方法。

pointer-declaration 参数指定是在关联的函数定义之前还是之后声明指向成员的指针。 pointer-declaration 参数是以下两个符号之一:

  • full_generality
    生成安全的(有时并非最佳)代码。 如果在关联的类定义之前声明指向成员的任何指针,请使用 full_generality。 此参数始终使用 most-general-representation 参数所指定的指针表示形式。 等效于 /vmg

  • best_case
    使用指向成员的所有指针的最佳大小写表示形式生成最佳代码。 要求在声明指向成员的指针之前定义类。 默认为 best_case

most-general-representation 参数指定编译器应用来安全引用指向翻译单元中的类成员的任何指针的最小指针表示形式。 该参数可以是以下值之一:

  • single_inheritance
    最常见的表示形式是指向成员函数的单一继承指针。 等效于 /vmg /vms。 如果类定义的继承模型为多重继承或虚拟继承,则会导致出现错误。

  • multiple_inheritance
    最常见的表示形式是指向成员函数的多重继承指针。 等效于 /vmg /vmm。 如果类定义的继承模型为虚拟继承,则会导致出现错误。

  • virtual_inheritance
    最常见的表示形式是指向成员函数的虚拟继承指针。 等效于 /vmg /vmv。 绝不会导致出现错误。 当使用 #pragma pointers_to_members(full_generality) 时,virtual_inheritance 为默认参数。

注意

建议你仅将 pointers_to_memberspragma 放置在要影响的源代码文件中以及所有 #include 指令之后。 此做法可以减小 pragma 影响其他文件以及为同一变量、函数或类名意外指定多个定义的风险。

示例

//   Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )

END C++ 专用

另请参阅

Pragma指令和__pragma_Pragma关键字