我在代码的 catch 部分有一个宏,比如说
#define CATCH( doSomething ) \
catch (MyException& e) \
{ \
try \
{ \
doSomething; \
} \
} \
catch (MyException* e) \
{ \
try \
{ \
doSomething; \
} \
}
在 doSomething 部分我需要了解异常的内容,有没有办法做到这一点? 一些函数 isPointer 可以像这样使用:
try
{
THROW(new MyException());
}
CATCH( \
if( isPointer(e) ) \
{ \
std::cout << (*e).toString(); \
} \
else \
{ \
std::cout << e.toString(); \
} \
)
答案 0 :(得分:11)
只需使用重载可能取消引用该参数:
template<class T>
T& deref(T* p) { return *p; }
template<class T>
T& deref(T& r) { return r; }
并使用:
CATCH( \
std::cout << deref(e).toString(); \
)
虽然我不得不承认我看到没有的理由来动态分配异常对象。