在.h文件中包含私有数据的头文件
Including headers just for private data in a .h file
我在class.cpp
和class.h
中定义了一个类。该类使用stuff.h
(当然还有stuff.cpp
)中为私有成员和方法定义的一些结构/类/类型/任何东西。我的主程序在main.cpp
中,其中#include
是class.h
,但不关心stuff.h
中的任何东西。如果它有区别,class.cp
应该是动态加载的(.dll/.so)。
理想情况下,我希望stuff.h
只包含在class.cpp
和stuff.cpp
中,它们只链接到这个文件,因为它们只会在main.cpp
中造成命名空间污染,并通过链接到最终程序而造成额外的膨胀。问题是我必须在class.h
中包含stuff.h
,因为它的定义在我的类的private:
部分中使用,这都在class.h
中。由于main.cpp
带来了class.h
,它也得到了stuff.h
!
我希望这是清楚的。在c#中,这可以通过分部类来解决。我如何在c++中做到这一点?
在c++中,你可以使用pImpl也就是不透明指针,你所暴露的类只有一个属性,这个属性是一个部分定义的结构体(有时人们使用void*代替,但效果相同)。
定义的部分结构,然后是完全定义在你stuff.cpp
,一切都是你所期望的——唯一的问题是,你需要确保你构造函数和析构函数的新/删除内部实现,你需要做出特别规定你的拷贝构造函数和赋值运算符operator=
——大多数人选择constrctor拷贝和赋值操作符私人,所以如果他们使用,编译器将对象。
看起来你需要痘痘习语。Pimpl的主要思想是将类与实现一起向前声明,而不是包含它的定义。这允许您删除对头文件中实现的依赖,这通常会导致编译速度加快,特别是在大型项目中。
- 从 bmp 文件数据创建 MFC CBitmap
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 获取文件数据预处理器宏
- 错误的值是使用c++从CSV文件数据写入数组
- 无法在可视C++中检索资源文件数据
- 将文本文件数据读入字符数组时提取运算符的歧义
- 如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
- 如何在C++中读取 UTF-8 文件数据
- 如何在结构中存储二进制文件数据
- 无法从 turbo c 程序中的文件检索文件数据
- 使用 fstream 将文件数据从当前位置保存到文件末尾
- 通过Google Protobuf发送二进制文件数据
- 在通过套接字向服务器发送文件数据时,我得到了一些垃圾值?为什么
- 如何使用dlang读取二进制文件数据
- 程序使用FSCANF读取文件数据后崩溃
- 检测二进制文件数据的端性
- C++ 从文本文件数据类型读取为结构,并将数据存储在列表的向量中
- 将 FFT 应用于 WAV 文件数据的 C++
- C++内存映射的文件数据预取