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

时间:2011-07-26 10:42:20

标签: c++ include header-files

我在class.cppclass.h中定义了一个类。该类使用一些结构/类/类型/在stuff.h(当然还有stuff.cpp)中定义的私有成员和方法。我的主要计划位于main.cpp#include s class.h,但不关心stuff.h中的任何内容。如果它有所不同,class.cp应该动态加载(.dll / .so) 理想情况下,stuff.h仅包含在class.cppstuff.cpp中的main.cpp只链接到此文件,因为它们只会导致stuff.h中的名称空间污染和额外膨胀通过与最终计划相关联 问题是我必须在class.h中加入private:,因为它的定义用于我班级的class.h部分,该部分全部位于main.cpp。自class.h引入stuff.h后,它也会获得{{1}}!

我希望这很清楚。在C#中,这可以通过部分类来解决。我怎么用C ++做这个?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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