请原谅我的 C++ 幼稚
我正在考虑创建将从 std::stringstream 继承的异常类,以便我可以使用 stringstream 的运算符 << 构建文本错误消息,同时能够尝试按类型捕获异常。
我的代码是这样的
class ExceptionXYZ : public std::stringstream
{};
Void someFunction()
{
try
{
//do something
}
catch(const ExceptionXYZ& e)
{
//handle XYZ
}
不幸的是我的 VS2008 编译器不喜欢这个并提示
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
basic_ios 是 stringstream 的曾祖 parent (或左右),某处肯定存在一些隐式访问冲突,但在我极其生锈的 C++ 和编译器无用的错误消息之间(它没有告诉我它担心的私有(private)成员)我有点迷路了。
我想人们一直在做这种事情(即抛出必须按类型捕获的文本异常)。
帮助将不胜感激
最佳答案
您不应该仅仅为了在构造期间使用它们而继承流类。如果您确实需要构建错误消息,您可能会选择根据请求存储构建错误消息所需的信息,或者在构造时构建错误消息。
听起来你想做这样的事情:
throw ExceptionXYZ() << "some " << information << " or " << other;
无论如何这都不会很好地工作,因为 operator<<()
都会返回 std::ostream&
而不是您想要的异常对象。
关于c++ - 在 C++ 中创建从 io 类继承的异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829695/