繁体   English   中英

继承 C++11 中的异常?

[英]Inheriting Exceptions in C++11?

我有一个名为Matrix<t>的 class ,我的教授让我写一个异常 class:

Matrix::IllegalInitialization

这样它包括 function what() ,所以我写了(在 Matrix.h 中):

template<class T>
class Matrix<T>::IllegalInitialization {
public:
    std::string what() const {
        return "Mtm matrix error: Illegal initialization values";
    }
};

但是我有一个问题,这个 class 不继承异常,如何解决这个问题?

我希望以下工作:

     try {
         Dimensions dim(0,5);
         Matrix<int> mat(dim);
} catch (const mtm::Matrix<int>::IllegalInitialization & e){ cout<< e.what() <<endl;
}

编辑:我的代码应该是这样的吗?

template<class T>
class Matrix<T>::IllegalInitialization : public std::exception {
public:
   const char* what() const override {
      return "Mtm matrix error: Illegal initialization values";
   }
};

我正进入(状态:

错误:覆盖 function 的异常规范比基本版本更宽松

std::exceptionwhat()方法是(cf cppreference ):

virtual const char* what() const noexcept;

您的方法未声明为noexcept因此它不能覆盖std::exception::what()

这是一个代码行多一点的例子,但它更灵活

使用示例:

try {
    throw MatrixErrors{ErrorCode::kIllegalInitialization};
} catch (const MatrixErrors& error) {
    std::cerr << error.what() << std::endl;
    return 1;
}

编码:

enum class ErrorCode {
  kIllegalInitialization,
};

// Helper function to get an explanatory string for error
inline std::string GetErrorString(ErrorCode error_code) {
  switch (error_code) {
    case ErrorCode::kIllegalInitialization:
      return "Mtm matrix error: Illegal initialization values";
  }
  return {};
}

class MatrixErrors : public std::runtime_error {
 public:
  explicit MatrixErrors(ErrorCode error_code) : std::runtime_error{GetErrorString(error_code)}, code_{error_code} {}

  ErrorCode GetCode() const noexcept { return code_; }

 private:
  ErrorCode code_;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM