代码之家  ›  专栏  ›  技术社区  ›  sud03r

错误处理和多态性

  •  0
  • sud03r  · 技术社区  · 15 年前

    我有一个应用程序,其中有一些代码如下:

    errCode = callMainSystem();
    switch (errCode){
        case FailErr: error("Err corresponding to val1\n");
        case IgnoreErr: error("Err corresponding to val2\n");
        ...
        ...
        default: error("Unknown error\n");
    }
    

    这些值是枚举常量。有什么意义吗?

    // Error* callMainSystem() 
    ... Some code
    return FaileErr(); // or some other error
    
    // handling code
    Error* err = callMainSystem();
    err->toString();   
    

    错误类可以设为singleton,因为它只需要打印错误消息。

    以上方法的优缺点是什么,大小是一个重要的标准,因为应用程序也需要在嵌入式设备上支持。

    备注:由于可移植性问题和相关的开销,我不想使用异常处理。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Péter Török    15 年前

    IMHO多态性在这里可能太过致命了,因为您实际上不需要不同的行为,只需要在每个错误代码中使用不同的数据。我会用一个简单的 map<ErrorCode, string> 而是存储从错误代码到消息的映射。

    多态解决方案需要额外的错误实例创建和销毁开销。我不知道如何使一个单独的错误,但是,您可以将它实现为一种类型化的枚举枚举,如Java(即固定实例的固定数量)。但是,硬连接它们的行为(例如,将错误消息打印到stderr)会使单元测试代码变得很困难。

        2
  •  4
  •   anon    15 年前

    当你说:

    我不想使用异常处理 因为可移植性问题 相关间接费用。

    假设有一个最新的编译器,那就没有了。你所做的只是在代码中复制C++编译器将为你做的事情。