gpt4 book ai didi

C++11 从函数返回错误代码

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:14 24 4
gpt4 key购买 nike

例如,我有一些带有 Load() 函数的类。

class DB {
private:
pt_db *db;
public:
DB(const char *path);
Write(const char *path);
int Load(const char *path);
};

我想根据传递的参数从 Load() 函数返回一些状态。

例如:

Load(<correct path to the file with valid content>) // return 0 - success
Load(<non-existent path to file>) // return 1
Load(<correct file path, but the content of the file is wrong>) // return 2

不过我也担心:

  1. 类型安全 - 我的意思是我想返回一些只能用作状态代码的对象。

    int res = Load(<file path>);

    int other = res * 2; // Should not be possible
  2. 仅使用预定义的值。使用 int 我可以错误地返回一些其他状态,例如 return 3 (我们建议 Load() 函数中发生错误)和如果我不希望通过此错误代码:

    int res = Load(<file path>);

    if(res == 1) {}

    else if (res == 2) {};

    ...

    // Here I have that code fails by reason that Load() returned non-expected 3 value
  3. 使用最佳 C++11 实践。

有人能帮忙吗?

最佳答案

枚举是返回状态的好方法,例如:

class Fetcher{
public:
enum FetchStatus{ NO_ERROR, INVALID_FILE_PATH, INVALID_FILE_FORMAT };
private:
FetchInfo info;
public:
FetchStatus fetch(){
FetchStatus status = NO_ERROR;
//fetch data given this->info
//and update status accordingly
return status;
}
};

另一种方法是使用异常

class Fetcher{
private:
FetchInfo info;
public:
void fetch(){
if file does not exist throw invalid file path exception
else if file is badly formatted throw invalid file format exception
else everything is good
}

使用枚举作为返回状态更像是 C 方式,使用异常可能更像是 C++ 方式,但这是一个选择问题。我喜欢枚举版本,因为在我看来它的代码更少且可读性更强。

关于C++11 从函数返回错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16818627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com