2

例如,我有一些具有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 实践。

有人可以帮忙吗?

4

1 回答 1

3

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

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++ 方式,但这是一个选择问题。我喜欢枚举版本,因为我认为它的代码更少且更具可读性。

于 2013-05-29T16:02:09.730 回答