C++ 如何隐藏一些类';C+中的s字段+;

C++ 如何隐藏一些类';C+中的s字段+;,c++,C++,我想开放一个项目的源代码,但我有一个如下的头文件: class Foo { public: int bar; int super_secret_field; }; 我希望开源标题包含栏字段,但不包含super\u secret\u字段。我仍然想要一个带有super\u secret\u字段的封闭源代码版本 我不能使用两个单独的头文件,因为使用Foo的类会有奇怪的包含。我可以对#includes做一些黑客行为,然后在发布的版本中删除它们,但我宁愿不这样做 有更好的方法吗?您要寻找的是P

我想开放一个项目的源代码,但我有一个如下的头文件:

class Foo {
 public:
  int bar;
  int super_secret_field;
};
我希望开源标题包含
字段,但不包含
super\u secret\u字段
。我仍然想要一个带有
super\u secret\u字段的封闭源代码版本

我不能使用两个单独的头文件,因为使用
Foo
的类会有奇怪的包含。我可以对#includes做一些黑客行为,然后在发布的版本中删除它们,但我宁愿不这样做


有更好的方法吗?

您要寻找的是PIMPL习惯用法,其中在您的头中只是一个接口,可以重定向到编译单元中的私有实现。

我相信解决您问题的方法就是习惯用法

在您的情况下,它看起来像:

// .h
class SecretType; // forward decl

class Foo {
 public:
  int bar;
  SecretType* secret_field;
};
在.cpp中,您可以使用包含
SecretType
声明的标题。这实际上对库的用户隐藏了
SecretType
的详细信息


附言:我将类型从int改为class,使解释更加完整。

怎么样?是的,那完全可以。写一个答案,我会接受的。真不敢相信我没想到。。。TGIF.
secret\u字段
在这里应该是私有的,以防止用户弄乱它。您还添加了一些公共方法,让用户做他们需要做的事情。