即将在 C++ 中添加的模块是否会修复/减轻对 pimpl 习惯用法的需求?

Jef*_*ffV 6 c++ pimpl-idiom c++-modules

据我所知,pimpl 习惯用法将私有实现隐藏在前向声明的符号名称后面,以便可以在私有 cpp 模块中声明和使用它。

示例: https: //cpppatterns.com/patterns/pimpl.html

据我所知,因为 pimpl 类 hosint 需要了解其结构(大小、对齐方式),所以 pimpl 必须通过某种指针是间接的。

(或分配为足够大小的块,然后移动/创建到稍后通过强制转换重新解释的位置。)

即将推出的模块规范是否以任何方式解决这个问题?

eer*_*ika 5

P0142R0

\n\n
\n

5.2.3 导出的类属性

\n\n

标准 C++ 的一个偶尔令人烦恼的规则是控制访问,而不是可见性。例如,类的私有成员对非成员实体可见,但不可访问。特别是,对类的私有成员的任何更改都可能会触发依赖于该类定义的任何翻译单元的电子处理,即使更改不影响依赖项的有效性单位。使用模块系统来解决这个问题是很诱人的。然而,为类成员设置两套不同的规则(可见性和可访问性)让我们感到不受欢迎,并且可能会造成混乱。此外,我们希望支持将现有代码大规模迁移到模块,而程序员不必担心类成员名称查找规则:如果您今天了解这些规则,那么您在学习时就不必学习新规则。转移到模块,您不必担心您使用的类是如何提供的(通过模块或非模块)。

\n\n

规则 3 一般来说,在模块的导出声明部分中计算的类的任何属性(例如完整性)都可按原样用于导入模块。

\n
\n\n

由于类的所有属性对导入器都是可见的,因此对这些属性的任何更改都将在导入器中可见。我没有看到模块能够解决 PIMPL 所解决的问题。

\n