Я знаю о pimpl-идиоме, которая в C будет выглядеть примерно так:
// foobar.h
struct FooBar {
char *someString;
struct FooBarImpl *pImpl;
};
// foobar.c
struct FooBarImpl {
char *hiddenString;
};
Тем не менее, с помощью Typecasting я могу избавиться от непрозрачного указателя и уменьшить шансы, которые кто-то путает с реализацией:
// foobar.h
struct FooBar {
char *someString
};
// foobar.c
struct FooBarImpl {
// FooBar members
char *someString
// FooBarImpl members
char *hiddenString
};
В последнем случае любая функция, выполняющая операцию на FooBar, просто вводит тип FooBarImpl, чтобы получить доступ к «закрытым» членам.
Я вижу, как это может стать проблемой, если, например, кто-то добавит некоторый элемент в FooBar, но не сделает то же самое для FooBarImpl. Однако в моем случае FooBar будет содержать только одного члена и вряд ли изменится.
Будет ли это считаться хорошей практикой, или я должен просто придерживаться идиомы pimpl, когда я хочу скрыть детали реализации?
Спасибо.