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