如何在C++中隐藏类的某些字段
How to hide some of a class's fields in C++
我想开源一个项目,但我有一个头文件,看起来像这样:
class Foo {
public:
int bar;
int super_secret_field;
};
我希望开源标头具有bar
字段,而不是super_secret_field
。 我仍然想要一个带有super_secret_field
的闭源版本.
我不能使用两个单独的头文件,因为这样使用 Foo
的类就会有奇怪的包含。我可以对 #includes 做一些笨拙的事情,然后在发布的版本中将它们删除,但我宁愿不这样做。
有没有更好的方法?
我相信
解决您问题的方法就是 PIMPL 习语。
在您的情况下,它看起来像这样:
// .h
class SecretType; // forward decl
class Foo {
public:
int bar;
SecretType* secret_field;
};
在.cpp中,您将包含包含SecretType
声明的标头。这实际上对库的用户隐藏了SecretType
的详细信息。
PS:我将类型从 int 更改为类,以使解释更完整一些。
您正在寻找的是 PIMPL 习语,其中您的标头只是一个接口,可以重定向到编译单元中的私有实现。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- C++ win32 如何使密码字段可选并启用复制和粘贴?
- 如何通过UDP接收QByteArray并将其解析为位字段结构?
- 仅匹配集合中的某些字段
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何使用位字段将数据从二进制文件复制到结构中?
- 如何在C++中隐藏类的某些字段
- 如何通过定义隐藏字段,仅提供二传手和getter
- 隐藏复合数据类型的某些字段,使其不被写入(或从hdf5文件中读取)
- 如何将SAFEARRAY(字节数组)放入HTML隐藏字段