我在班上实施错误。我的意思是我为可能发生的各种误用创建错误消息。我知道如何通过std :: string或stringstream组合字符串和数字,但我想知道是否有更短的方法来执行它,这是括号运算符中的一个示例:
std::stringstream err;
err << "The key " << key << " is not set.";
throw std::invalid_argument(err.str());
我正在寻找适合这一行的东西:
throw std::invalid_argument("The key " + key + " is not set."); <- obviously broken
std :: invalid_argument将采用的任何格式都没问题。
答案 0 :(得分:3)
只需使用std::to_string
C ++ 11
throw std::invalid_argument("The key " +
std::to_string( key ) +
" is not set.");
答案 1 :(得分:1)
另一种解决方案是使用构造函数创建自己的异常类,该构造函数接受uint64_t
并自行创建错误消息:
#include <sstream>
#include <stdexcept>
#include <exception>
#include <string>
#include <iostream>
class MyException : public std::invalid_argument
{
private:
static std::string GetMessage(uint64_t key)
{
std::ostringstream err;
err << "The key " << key << " is not set.";
return err.str();
}
public:
MyException(uint64_t key) :
std::invalid_argument(GetMessage(key).c_str()) {}
virtual ~MyException() throw() {}
};
int main()
{
try
{
throw MyException(123);
}
catch (std::exception const &exc)
{
std::cout << exc.what() << "\n";
}
}