我正在Windows上用VS 2010编写C++ API,它从DLL导出几个类.我们计划稍后支持其他平台(MacOS,Linux).
我目前正在考虑如何设计错误处理.我不想使用异常,因为跨越DLL边界的问题(至少在Windows中).
到目前为止,我想出了以下三种设计.
设计1:
对于每一个方法的返回值将表明,如果操作成功或通过返回要么没有true/false或pointer/nullptr分别.然后,客户端可以调用GetLastError()以检索错误代码(枚举),该错误代码详细说明了上次失败.
typedef std::shared_ptr<Object> ObjectPtr;
class APIClass
{
bool SetSomething(int i);
bool IsSomethingSet();
bool DoSomething();
ObjectPtr GetSomething();
ErrorCode GetLastError();
}
Run Code Online (Sandbox Code Playgroud)
设计2:
每种方法都返回一个错误代码.[out]参数应该通过值或(const)引用作为指针和[in]参数传递.
typedef std::shared_ptr<Object> ObjectPtr;
class APIClass
{
ErrorCode SetSomething(int i);
ErrorCode IsSomethingSet(bool* outAsk);
ErrorCode DoSomething();
ErrorCode GetSomething(ObjectPtr* outObj);
}
Run Code Online (Sandbox Code Playgroud)
设计3:
与设计1类似,但您可以将可选的错误代码作为[out]参数传递给每个函数.
typedef std::shared_ptr<Object> ObjectPtr;
class APIClass
{
bool SetSomething(int i, ErrorCode* err = nullptr);
bool IsSomethingSet(ErrorCode* err = nullptr);
bool DoSomething(ErrorCode* err = nullptr);
ObjectPtr GetSomething(ErrorCode* err = …Run Code Online (Sandbox Code Playgroud)