如何使用参数引发错误消息?

时间:2018-10-30 20:12:29

标签: c++ error-handling exception-handling throw

我真的很想抛出一条错误消息,其中包含该函数的参数。我知道我可以做到:

throw std::out_of_range("Empty tree");

我正在努力解决的另一个错误是:

"Cannot find ceil for key <key>" 

如您所见,我应该包含我找不到其ceil的密钥。我将键作为引发异常的函数中的变量,但是我不知道如何将其包含在最终由e.what()打印的内容中。

编辑:这是一个作为类成员的模板函数,因此,密钥现在只是类型T。因此,为什么我认为将其格式化为c字符串是行不通的。

1 个答案:

答案 0 :(得分:0)

标准异常仅将字符串作为参数:

例如超出范围,请参见apache.org docs

namespace std {
  class out_of_range : public logic_error {
  public:
    explicit out_of_range(const string&  what_arg);
  };
}

您可以使用任何方法预先构建字符串,然后将其作为参数传递给异常。

示例

#include <string>
#include <sstream>
#include <stdexcept>

std::ostringstream oss;
oss << "Cannot find ceil for key " << key;
std::string errorString = oss.str();

throw std::out_of_range(errorString);

有关创建字符串的其他方法,请参见C++ create string of text and variables