我知道在 C 中看起来像这样的 pimpl-idiom:
// foobar.h
struct FooBar {
char *someString;
struct FooBarImpl *pImpl;
};
// foobar.c
struct FooBarImpl {
char *hiddenString;
};
但是,通过类型转换,我可以摆脱不透明的指针并减少有人弄乱实现的可能性:
// foobar.h
struct FooBar {
char *someString
};
// foobar.c
struct FooBarImpl {
// FooBar members
char *someString
// FooBarImpl members
char *hiddenString
};
在后一种情况下,任何对 FooBar 进行操作的函数都将简单地类型转换为 FooBarImpl 以访问“私有”成员。
例如,如果有人向 FooBar 添加一些成员但对 FooBarImpl 不这样做,我可以看到这将如何成为一个问题。但是在我的情况下 FooBar 将只包含一个成员并且不太可能改变。
当我希望隐藏实现细节时,这会被认为是一种好的做法,还是应该坚持使用 pimpl-idiom?
谢谢你。