我一直在读关于在C中使用面向对象编程(OOP)的文章,但是我从来不喜欢它不能像C++那样拥有私有数据成员。但是后来我想到可以创建2个结构体,一个在头文件中定义,另一个在源文件中定义。
// =========================================
// in somestruct.h
typedef struct {
int _public_member;
} SomeStruct;
// =========================================
// in somestruct.c
#include "somestruct.h"
typedef struct {
int _public_member;
int _private_member;
} SomeStructSource;
SomeStruct *SomeStruct_Create()
{
SomeStructSource *p = (SomeStructSource *)malloc(sizeof(SomeStructSource));
p->_private_member = 42;
return (SomeStruct *)p;
}
你可以直接将一个结构体转换为另一个结构体。 这被认为是不好的实践吗?还是经常这样做?