2014-07-23 70 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实例一起工作”的需求防止了这种情况,即非常差