据我所知,pimpl 习惯用法将私有实现隐藏在前向声明的符号名称后面,因此可以在私有 cpp 模块中声明和使用它。
示例:https ://cpppatterns.com/patterns/pimpl.html
据我所知,因为类 hosint pimpl 需要知道它的结构(大小,对齐),所以 pimpl 必须通过某种指针间接。
(或分配为足够大小的块,然后将其移动/创建到稍后由 cast 重新解释的位置。)
即将发布的模块规范是否以任何方式解决了这个问题?
据我所知,pimpl 习惯用法将私有实现隐藏在前向声明的符号名称后面,因此可以在私有 cpp 模块中声明和使用它。
示例:https ://cpppatterns.com/patterns/pimpl.html
据我所知,因为类 hosint pimpl 需要知道它的结构(大小,对齐),所以 pimpl 必须通过某种指针间接。
(或分配为足够大小的块,然后将其移动/创建到稍后由 cast 重新解释的位置。)
即将发布的模块规范是否以任何方式解决了这个问题?
5.2.3 导出的类属性
标准 C++ 的一个偶尔令人烦恼的规则是控制访问,而不是可见性。例如,类的私有成员对非成员实体可见,但不可访问。特别是,对类的私有成员的任何更改都可能触发依赖于该类定义的任何翻译单元的电子处理,即使该更改不影响依赖单元的有效性。用模块系统解决这个问题很诱人。然而,为班级成员设置两组不同的规则(可见性和可访问性)让我们觉得这是不受欢迎的,并且可能是混乱的肥沃来源。此外,我们希望支持将现有代码大规模迁移到模块,而程序员不必担心类成员名称查找规则:如果您今天了解这些规则,
规则 3 通常,在模块的导出声明部分中计算的类的任何属性(例如完整性)都可以按原样用于导入模块。
由于类的所有属性对导入器都是可见的,因此对这些属性的任何更改都将在导入器中可见。我没有看到模块解决了 PIMPL 解决的问题。