C++ 20? 模块 - 不导出私有
C++ 20? modules - no exporting of privates
观看了 2 CppCon Gabriel Dos Reis 关于模块 TS 的演讲。
我记得他不想导出任何私有成员/函数,所以其他模块根本无法使用它们。
我理解他的立场,但这不会与未来的C++反思相冲突吗?例如,当C++有一个可以枚举所有类函数的反射时,它不应该也能够枚举私有函数吗?
我知道,访问私有函数是不好的,但在极少数极端情况下,这是必要的(有时需要如何const_cast,尽管编写它的开发人员应该感觉很糟糕)
编辑:
并且"不公开私有"至少有一个例外 - 如果类使用"非虚拟接口"模式
模块不会(如目前定义的那样)改变C++在基本层面上的工作方式。它更改了一些内容,包括可以访问的名称以及可从何处访问的名称。但它不会改变语言使用这些名称的工作方式。
因此,如果静态反射出现并允许你谈论一个类的私人成员,那么你可以谈论一个类的私人成员。该类定义是通过 #include 指令还是模块包含获得的都无关紧要。
要允许Gabriel Dos Reis想要的东西,需要对反射规则做出明确的例外。这不太可能发生。
这也不是那么重要。虽然能够从模块文件中删除私有成员(以及它们使用的任何非导出类型)会使模块文件变小,但我认为这个额外的模块文件大小不会那么大。它允许您做的主要事情是对模块源代码进行某些更改,这些更改不需要重新编译包含您的模块的模块。但是一个模块化的代码库无论如何都应该有相对快速的编译。因此,虽然它会很好,但它几乎不是必需的。
相关文章:
- 尝试导入pybind-opencv模块时出现libgtk错误
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 内联如何影响模块接口中的成员函数
- C++返回 Numpy 数组的 Python 扩展模块
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 如何从线程中的不同模块调用函数?
- 如何使用 soong 命名空间来有条件地编译模块
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- CMake - 模块 + 库混淆
- 特征 LLT 模块给出不正确的结果?
- 枚举进程模块在有效句柄上返回无效句柄
- 在 python 模块中导入子模块时PyImport_Import失败
- 将 PCL 链接到 Cython C++ 模块
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 电源功能模块化操作
- 如何告诉本机节点模块所需的dll存储在哪里?
- 如何为模块化应用程序实现C++插件系统
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- Arduino 模块化编程与全局和设置