我有一些C ++库,为其客户端提供本机C API。事实上,这个库是一些类实例的包装器,API调用应该使用相同的类实例操作,使用它的公共接口,例如:
// 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
实例,可以使用此类的全局实例,单例可能。我想避免使用全局变量,如何实现?
答案 0 :(得分:3)
一种可能性是将您创建的实例的void指针返回给调用者,并让调用者将该指针传递给所有函数。库可以将该指针强制转换为正确的类型并调用实例上的方法。
它不漂亮,但你想要一个C API,所以你能期待什么。
答案 1 :(得分:0)
看起来设计不好,库应该在多线程环境中工作。这种“所有API调用能够使用相同的Foo实例”的需求可以防止非常错误。