1

观看了 2 CppCon Gabriel Dos Reis 关于模块 TS 的讨论。

我记得他不想导出任何私有成员/函数,所以其他模块根本无法使用它们。

我理解他的立场,但它不会与未来的 C++ 反射冲突吗?例如,当 C++ 具有可以枚举所有类函数的反射时,它不应该也能够枚举私有函数吗?

我知道,访问私有函数是不好的,但在极少数极端情况下它是必要的(有时需要 const_cast,尽管编写它的开发人员应该感觉很糟糕)

编辑:

并且“不暴露私有”至少有一个例外 - 如果类使用“非虚拟接口”模式

4

1 回答 1

2

模块不会(按照目前的定义)从根本上改变 C++ 的工作方式。它通过可访问的名称和可访问的位置更改了一些内容。但它不会改变语言如何使用这些名称。

因此,如果出现静态反射并允许您谈论类的私有成员,那么您就可以谈论类的私有成员。该类定义是通过#include 指令还是模块包含来给您的,这无关紧要。

为了允许 Gabriel Dos Reis 想要的东西,需要对反射规则做出明确的例外。这不太可能发生。

它也不是那么重要。虽然能够从模块文件中删除私有成员(以及它们使用的任何非导出类型)会使模块文件变得更小,但我认为这个额外的模块文件大小不会有什么大不了的。它允许您做的主要事情是对模块源代码进行某些更改,而不需要重新编译包含您的模块的模块。但是一个模块化良好的代码库无论如何都应该有相对快速的编译。因此,虽然它会很好,但它几乎不是必需的。

于 2017-05-10T02:06:40.113 回答