繁体   English   中英

仅包含.h文件中私有数据的标头

[英]Including headers just for private data in a .h file

我有一个在class.cppclass.h定义的类。 该类使用一些结构/类/类型/在stuff.h (当然, stuff.cpp )中定义的私有成员和方法。 我的主程序是在main.cpp#include class.h ,但不关心stuff.h任何stuff.h 如果它有所不同,则应该动态加载class.cp (.dll / .so)。
理想情况下,我希望将stuff.h只包含在class.cppstuff.cpp只链接到这个文件,因为它们只会导致main.cpp名称空间污染,并且通过链接到最终程序会产生额外的膨胀。
问题是,我必须包括stuff.hclass.h ,因为它是定义在使用private:我的课,这是所有的一部分class.h 因为main.cpp class.h ,所以它也得到了stuff.h

我希望这很清楚。 在C#中,这可以通过部分类来解决。 我将如何在C ++中执行此操作?

您可以使用pImpl aka Opaque Pointers在C ++中执行此操作,其中您公开的类只有一个属性,这是一个部分定义的结构(有时人们使用void *而不是相同的efefct)。

部分定义的结构,然后在你的stuff.cpp完全定义,一切都按预期工作 - 唯一的障碍是你需要确保你的构造函数和析构函数new /删除内部实现,你需要特殊复制构造函数和赋值运算operator=操作operator= - 大多数人选择只复制constrctor和赋值运算符,以便编译器在使用它们时会反对。

看起来你需要Pimpl Idiom Pimpl的主要思想是你使用实现转发声明类而不是包含它的定义。 这允许您删除头文件中实现的依赖性,这通常会导致编译速度加快,尤其是在大型项目上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM