-2

我试过的:

class MyException : public std::runtime_error {};

throw MyException("Sorry out of bounds, should be between 0 and "+limit);

我不确定如何实现这样的功能。

4

2 回答 2

0

这里有两个问题:如何让您的异常接受字符串参数,以及如何根据运行时信息创建字符串。

class MyException : public std::runtime_error 
{
    MyExcetion(const std::string& message) // pass by const reference, to avoid unnecessary copying
    :  std::runtime_error(message)
    {}          
};

然后你有不同的方法来构造字符串参数:

  1. std::to_string最方便,但它是一个 C++11 函数。

    throw MyException(std::string("Out of bounds, should be between 0 and ") 
                      + std::to_string(limit));
    
  2. 或者使用boost::lexical_cast(函数名是一个链接)。

    throw MyException(std::string("Out of bounds, should be between 0 and ")
                      + boost::lexical_cast<std::string>(limit));
    
  3. 您还可以创建一个 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);
    
于 2013-10-31T23:51:23.807 回答
0

您需要为 MyException 定义一个构造函数,它接受一个字符串,然后将其发送到 std::runtime_error 的构造函数。像这样的东西:

class MyException : public std::runtime_error {
public:
    MyException(std::string str) : std::runtime_error(str)
    {
    }
};
于 2013-10-31T22:48:44.847 回答