我试过的:
class MyException : public std::runtime_error {};
throw MyException("Sorry out of bounds, should be between 0 and "+limit);
我不确定如何实现这样的功能。
这里有两个问题:如何让您的异常接受字符串参数,以及如何根据运行时信息创建字符串。
class MyException : public std::runtime_error
{
MyExcetion(const std::string& message) // pass by const reference, to avoid unnecessary copying
: std::runtime_error(message)
{}
};
然后你有不同的方法来构造字符串参数:
std::to_string
最方便,但它是一个 C++11 函数。
throw MyException(std::string("Out of bounds, should be between 0 and ")
+ std::to_string(limit));
或者使用boost::lexical_cast
(函数名是一个链接)。
throw MyException(std::string("Out of bounds, should be between 0 and ")
+ boost::lexical_cast<std::string>(limit));
您还可以创建一个 C 字符串缓冲区并使用printf 样式命令。std::snprintf
将是首选,但也是 C++11。
char buffer[24];
int retval = std::sprintf(buffer, "%d", limit); // not preferred
// could check that retval is positive
throw MyException(std::string("Out of bounds, should be between 0 and ")
+ buffer);
您需要为 MyException 定义一个构造函数,它接受一个字符串,然后将其发送到 std::runtime_error 的构造函数。像这样的东西:
class MyException : public std::runtime_error {
public:
MyException(std::string str) : std::runtime_error(str)
{
}
};