我用传统的C库接口的工作(以C++),其公开不透明的指针作为ç不透明指针陷阱
typedef void * OpaqueObject
在图书馆:
OpaqueObject CreateObject()
{
return new OurCppLibrary::Object();
}
当然,这绝对不提供为该图书馆的客户提供类型安全。应该从void指针改变typedef到结构指针的工作是完全一样的,但提供少量的类型安全?
typedef struct OpaqueObjectInternal_ *OpaqueObject
// OpaqueObjectInternal_ is NEVER defined anywhere in client or library code
有没有对齐的问题,或者我对现在担心其他陷阱,我明确地指向一个结构,即使我真的不指向一个?
在** C **中没有叫'new'的操作符! – Mahesh 2011-03-14 21:16:28
@Mahesh:我认为OP是用C++封装了一个C库; 'new'发生在C++中(由'OurCppLibrary'限定符推断出来的) – fbrereto 2011-03-14 21:19:59
void *作为一个不透明的对象是非常有意义的 - 你的事物的结尾不会弄乱对象,而且他们知道该怎么做用它做。如果有的话,使其成为'void *'使得它更安全,只要你像他们描述的那样使用它的API。 – James 2011-03-14 21:40:08