我想开源项目,但我有一个头文件,如下所示:
class Foo {
public:
int bar;
int super_secret_field;
};
Run Code Online (Sandbox Code Playgroud)
我希望开源标头有bar字段,但不是super_secret_field.我仍然想要一个封闭源版本super_secret_field.
我不能使用两个单独的头文件,因为那么使用的类Foo将具有奇怪的包含.我可以用#includes做一些hacky然后在发布的版本中删除它们,但我宁愿不这样做.
有没有更好的办法?
我相信你的问题的解决方案是PIMPL习语.
在你的情况下,它看起来像:
// .h
class SecretType; // forward decl
class Foo {
public:
int bar;
SecretType* secret_field;
};
Run Code Online (Sandbox Code Playgroud)
在.cpp中你将包含包含SecretType声明的标题.这实际上隐藏了SecretType库的用户的详细信息.
PS:我将类型从int更改为类,使解释更加完整.