【发布时间】:2019-01-18 18:27:25
【问题描述】:
我试图让用户选择从我的班级中捕获所有错误或单独捕获它们。我可以捕获单个异常,但是当我尝试捕获基本错误类时无法正确捕获它。我从 std::exception “未知错误”中得到标准错误。
我试图捕获基本异常并捕获派生错误。
我可以将我的所有错误都作为基本错误类型并全部捕获吗?
#include <iostream>
#include <exception>
struct FooException
: public std::exception
{
};
struct FooRuntimeException
: public std::runtime_error,
public FooException
{
FooRuntimeException(const char* what)
: runtime_error(what) {}
};
struct FooRangeError
: public std::range_error,
public FooException
{
FooRangeError(const char* what)
: range_error(what) {}
};
class Foo
{
public:
Foo() = default;
~Foo() {};
void throwRunTimeException()
{
throw FooRuntimeException("Runtime Error");
}
void throwRangeError()
{
throw FooRuntimeException("Range Error");
}
};
int main()
{
try
{
auto foo = Foo();
foo.throwRunTimeException();
}
catch (const FooException &e)
{
std::cerr << e.what(); // catches standard error message
}
return 0;
}
有没有办法做到这一点,或者模板有可能吗?
【问题讨论】:
-
没有一个派生类初始化它们的
FooException子对象。为什么是多重继承? -
当涉及到异常时,确实没有理由使用多重继承。
-
你喜欢在自己的脚上开枪吗?
-
您正在强制使用diamond problem。您的异常从
std::exception继承了两次。 -
我的意思是他们只是默认初始化它们,当然。