我在class.cpp
和class.h
中定义了一个类。该类使用一些结构/类/类型/在stuff.h
(当然还有stuff.cpp
)中定义的私有成员和方法。我的主要计划位于main.cpp
,#include
s class.h
,但不关心stuff.h
中的任何内容。如果它有所不同,class.cp
应该动态加载(.dll / .so)
理想情况下,stuff.h
仅包含在class.cpp
和stuff.cpp
中的main.cpp
只链接到此文件,因为它们只会导致stuff.h
中的名称空间污染和额外膨胀通过与最终计划相关联
问题是我必须在class.h
中加入private:
,因为它的定义用于我班级的class.h
部分,该部分全部位于main.cpp
。自class.h
引入stuff.h
后,它也会获得{{1}}!
我希望这很清楚。在C#中,这可以通过部分类来解决。我怎么用C ++做这个?
答案 0 :(得分:2)
您可以使用pImpl aka Opaque Pointers在C ++中执行此操作,其中您公开的类只有一个属性,这是一个部分定义的结构(有时人们使用void *代替,但是使用相同的efefct)。
部分定义的结构,然后在stuff.cpp
内完全定义,一切都按预期工作 - 唯一的障碍是你需要确保构造函数和析构函数new / delete内部实现,以及你需要在你的拷贝构造函数和你的赋值运算符operator=
中做出特殊的规定 - 大多数人选择只复制constrctor和赋值运算符,这样如果使用它们,编译器就会反对。
答案 1 :(得分:0)
在这里看起来你需要Pimpl Idiom。 Pimpl的主要思想是你使用实现转发声明类而不是包含它的定义。这允许您删除头文件中实现的依赖性,这通常会导致编译速度加快,尤其是在大型项目中。