C 平台抽象的Typedef与容器结构?
我正在一个小型的平台抽象层上工作,我打算将其用作未来项目的基础。最初,我遵循SDL的指导,动态分配一个容器结构 例如,在公共标题中:C 平台抽象的Typedef与容器结构?,c,struct,cross-platform,typedef,C,Struct,Cross Platform,Typedef,我正在一个小型的平台抽象层上工作,我打算将其用作未来项目的基础。最初,我遵循SDL的指导,动态分配一个容器结构 例如,在公共标题中: typedef struct MY_MUTEX MY_MUTEX; 在Windows特定的源文件中: struct MY_MUTEX { HANDLE handle; }; MY_MUTEX *MY_CreateMutex() { MY_MUTEX *m = malloc(sizeof(MY_MUTEX)); ... m->
typedef struct MY_MUTEX MY_MUTEX;
在Windows特定的源文件中:
struct MY_MUTEX {
HANDLE handle;
};
MY_MUTEX *MY_CreateMutex() {
MY_MUTEX *m = malloc(sizeof(MY_MUTEX));
...
m->handle = CreateMutex(NULL, FALSE, NULL);
...
}
但后来我开始怀疑我是否可以完全放弃内存分配,只需typedef
特定于平台的类型:
#ifdef _WIN32
typedef HANDLE MY_MUTEX;
#else
typedef pthread_mutex_t MY_MUTEX;
#endif
避免不必要的内存分配对我来说似乎是个好主意,但是这个简单的
typedef
方法会带来什么样的问题(如果有的话)?我会牺牲很多灵活性吗?您可以使用typedef
、容器结构,甚至宏——这些都可以。即使是混合物也可以。重要的是,无论使用哪种底层实现,您的抽象在不同平台上的行为都是一致的——这可能会使某些选择不适合某些情况
例如,在Unix上使用简单的typedef
来模拟Windows事件对象可能是不合理的,因此您可以使用容器结构来处理事件。。。但这不应阻止您对互斥体使用typedef
,只要这足以满足通过抽象使用互斥体的方式
我确信有一些人更愿意在整个API中使用一种方法,但我认为只要抽象在一个平台和另一个平台之间表现一致,就没有必要这样做
基本上,在每种情况下使用最轻的东西