我正试图找出如何写这样的东西:
try{
throw MyCustomException;
}
catch(const MyCustomException &e){
cout<< e;
}
但是如何为此目的定义overloaded operator <<
?
自定义异常类:
class MyCustomException{
public:
MyCustomException(const int& x) {
stringstream ss;
ss << x;
msg_ = "Invalid index [" + ss.str() + "]";
}
string getMessage() const {
return (msg_);
}
private:
string msg_;
};
答案 0 :(得分:4)
老实说,我认为正确的解决方案是遵循标准惯例并使MyCustomException
来自std::exception
。然后,您将实现what()
虚拟成员函数以返回消息,并且最终可以通过operator <<
将该字符串插入到标准输出中。
这就是你的异常类的样子:
#include <string>
#include <sstream>
#include <stdexcept>
using std::string;
using std::stringstream;
class MyCustomException : public std::exception
{
public:
MyCustomException(const int& x) {
stringstream ss;
ss << x;
msg_ = "Invalid index [" + ss.str() + "]";
}
virtual const char* what() const noexcept {
return (msg_.c_str());
}
private:
string msg_;
};
以下是您将如何使用它:
#include <iostream>
using std::cout;
int main()
{
try
{
throw MyCustomException(42);
}
catch(const MyCustomException &e)
{
cout << e.what();
}
}
最后,live example。