gpt4 book ai didi

C++ 20?模块 - 不导出私有(private)

转载 作者:行者123 更新时间:2023-11-30 03:31:50 25 4
gpt4 key购买 nike

观看了 2 CppCon Gabriel Dos Reis 关于模块 TS 的演讲。

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

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

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

编辑:

“不公开私有(private)”至少有一个异常(exception)——如果类使用“非虚拟接口(interface)”模式

最佳答案

模块不会(按照目前的定义)从根本上改变 C++ 的工作方式。它改变了一些事情,包括哪些名字可以访问以及从哪里可以访问。但它不会改变语言如何处理这些名称。

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

要允许 Gabriel Dos Reis 想要的东西,需要对反射规则进行明确的异常(exception)处理。这不太可能发生。

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

关于C++ 20?模块 - 不导出私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com