私は、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 には 1 つのメンバーのみが含まれ、変更される可能性はほとんどありません。
これは良い習慣と見なされますか、それとも実装の詳細を非表示にしたい場合は pimpl-idiom に固執する必要がありますか?
ありがとうございました。