小编Hos*_*815的帖子

错误处理C++ API的设计

我正在Windows上用VS 2010编写C++ API,它从DLL导出几个类.我们计划稍后支持其他平台(MacOS,Linux).

我目前正在考虑如何设计错误处理.我不想使用异常,因为跨越DLL边界的问题(至少在Windows中).

到目前为止,我想出了以下三种设计.

设计1:

对于每一个方法的返回值将表明,如果操作成功或通过返回要么没有true/falsepointer/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)

c++ api error-handling exception

15
推荐指数
1
解决办法
2543
查看次数

标签 统计

api ×1

c++ ×1

error-handling ×1

exception ×1