我真的很想抛出一条错误消息,其中包含该函数的参数。我知道我可以做到:
throw std::out_of_range("Empty tree");
我正在努力解决的另一个错误是:
"Cannot find ceil for key <key>"
如您所见,我应该包含我找不到其ceil的密钥。我将键作为引发异常的函数中的变量,但是我不知道如何将其包含在最终由e.what()打印的内容中。
编辑:这是一个作为类成员的模板函数,因此,密钥现在只是类型T。因此,为什么我认为将其格式化为c字符串是行不通的。
答案 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