2014-07-23 115 views
0

我有一些C++庫,爲其客戶端提供本地C API。事實上,這個庫是身邊的一些類實例和API調用應該用相同的類實例操作的包裝,使用它的公共接口,例如:避免C++庫中的全局對象

// library API, using class methods internally 
MYDLL_API uint8_t __stdcall init(); 
MYDLL_API uint8_t __stdcall release(); 
MYDLL_API uint8_t __stdcall setSomething(); 
MYDLL_API uint8_t __stdcall doSomething(); 

// some inernal class 
class Foo{ 
public: 
    void setSomething(); 
    void doSomething(); 
private 
    // some state 
}; 

提供所有API的唯一方法調用與工作能力同樣的Foo實例我看到的是使用這個類的全局實例,單例可能。我想避免使用全局變量,它怎麼能達到?

回答

3

一種可能性是將您創建的實例的void指針返回給調用者,並讓調用者將其傳遞給所有函數。該庫可以將該指針轉換爲適當的類型並調用實例上的方法。

這不太好,但你想要一個C API,那麼你可以期待什麼。

0

看起來像一個糟糕的設計,庫應該在多線程環境中工作。對「所有API調用能力與相同的Foo實例一起工作」的需求防止了這種情況,即非常差