我用傳統的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