使用标准布局类型与其他语言进行通信
Using standard layout types to communicate with other languages
This draft of the standard contains a note at 11.2.6 关于标准布局类型:
[Note 3: Standard-layout classes are useful for communicating with code written in other programming languages. Their layout is specified in [class.mem]. — end note]
在 link 到 class.mem
之后,我们找到了关于标准布局类型布局的规则,这些规则从 here 开始,但我不清楚它们是什么使它们对交流有用与其他语言。这一切似乎都与布局兼容的类型和通用初始序列有关,但我没有看到任何迹象表明这些兼容性要求扩展为给定的实现。
我一直认为标准布局类型不能由实现强加任意填充,并且必须遵循“直观”布局,这将使它们易于在其他语言中使用。但是我好像找不到这样的规则。
这个注释是什么意思?我是否错过了任何强制标准布局类型至少在给定平台上保持一致的规则?
该标准无法有意义地谈论其他语言和实现:即使可以明确定义“平台”,它所能做的就是限制 C++ 实现,可能在一种不可能满足其他软件做出的任意选择的时尚。也就是说,ABI 可以定义这样的东西,而标准布局类型是那些没有任何“C++ 特定”的东西(比如引用、基础 class 子对象、或虚拟 table 指针),可能无法映射到其他环境。实际上,“其他环境”只是 C,或本身遵循 C 规则的其他语言(例如,ctypes
Python).
This draft of the standard contains a note at 11.2.6 关于标准布局类型:
[Note 3: Standard-layout classes are useful for communicating with code written in other programming languages. Their layout is specified in [class.mem]. — end note]
在 link 到 class.mem
之后,我们找到了关于标准布局类型布局的规则,这些规则从 here 开始,但我不清楚它们是什么使它们对交流有用与其他语言。这一切似乎都与布局兼容的类型和通用初始序列有关,但我没有看到任何迹象表明这些兼容性要求扩展为给定的实现。
我一直认为标准布局类型不能由实现强加任意填充,并且必须遵循“直观”布局,这将使它们易于在其他语言中使用。但是我好像找不到这样的规则。
这个注释是什么意思?我是否错过了任何强制标准布局类型至少在给定平台上保持一致的规则?
该标准无法有意义地谈论其他语言和实现:即使可以明确定义“平台”,它所能做的就是限制 C++ 实现,可能在一种不可能满足其他软件做出的任意选择的时尚。也就是说,ABI 可以定义这样的东西,而标准布局类型是那些没有任何“C++ 特定”的东西(比如引用、基础 class 子对象、或虚拟 table 指针),可能无法映射到其他环境。实际上,“其他环境”只是 C,或本身遵循 C 规则的其他语言(例如,ctypes
Python).