捕获并修改 std::exception 和子类,重新抛出相同的类型
Catch and modify std::exception and subclasses, rethrow same type
我想这样做:
try
{
// ...
}
catch(const std::exception& ex)
{
// should preserve ex' runtime type
throw type_in_question(std::string("Custom message:") + ex.what());
}
这是否可能以某种方式不必为每个子类型编写单独的处理程序?
您要查找的内容可能是这样的:
try {
// ...
}
template <typename Exc>
catch (Exc const& ex) {
throw Exc(std::string("Custom message:") + ex.what());
}
至少我们通常C++是这样做这样的事情的。不幸的是,您不能在这样的 catch 块中编写模板代码。您能做的最好的事情就是将一些运行时类型信息添加为字符串:
try {
// ...
}
catch (std::exception const& ex) {
throw std::runtime_error(std::string("Custom message from ") +
typeid(ex).name() + ": " + ex.what());
}
相关文章:
- 动态构造函数中的新字符 [] 抛出"损坏的顶部大小";
- .exe应用程序在windows10中创建新模块时抛出错误,但在windows7中工作正常
- 如何抛出"template parameter"类型的异常?
- std:任何抛出异常解析函数类型
- 为什么 std::vector 允许对其包含的类型使用可抛出的移动构造函数?
- Expect_throw-实际:它抛出不同类型的Google测试
- 较新版本的GCC抛出reinterpret_cast错误
- 抛出异常:类型错误:对象不支持属性或方法"createVertexArray"(emscripten)
- 操作员新不会在Android上抛出bad_alloc
- 捕获并修改 std::exception 和子类,重新抛出相同的类型
- std::rethrow_exception和抛出的异常类型
- ifstream::eof在if语句中时抛出类型错误
- emscripten + sdl = 抛出异常:类型错误:无法设置未定义的属性'widthNative'
- C++:检查是否在没有外部库的情况下抛出了某个异常类型
- Marshal.SizeOf(结构类型) 总是抛出错误
- 尽管没有定义标题,但新的抛出bad_alloc <new> ?
- NEON内在类型在C中工作,但在C++中抛出无效参数错误
- 编译器抛出错误,指出"Dict<int> a(10)"具有初始值设定项但类型不完整"
- 我相信这是clang中的一个错误,它与构造函数抛出的placement新表达式有关
- 漂亮的地图打印机抛出类型错误