От: | Chez | ||
Дата: | 06.10.05 14:08 | ||
Оценка: |
#include <exception>
template<typename _ExCatchAs>
inline bool get_exception()
{
bool result = false;
try
{
throw;
}
catch(_ExCatchAs _e)
{
result = true;
}
catch(...)
{
result = false;
}
return result;
}
template<typename _ExCatchAs, typename _ExType>
inline bool get_exception(_ExType* pex/* = NULL*/)
{
bool result = false;
try
{
throw;
}
catch(_ExCatchAs _e)
{
if (pex)
{
*pex = _e;
}
result = true;
}
catch(...)
{
result = false;
}
return result;
}
template<typename _ExCatchAs, typename _ExType, class _Predicate>
inline bool get_exception(_ExType* pex/* = NULL*/, _Predicate pred)
{
bool result = false;
try
{
throw;
}
catch(_ExCatchAs _e)
{
if (pred(_e))
{
if (pex)
{
*pex = _e;
}
result = true;
}
}
catch(...)
{
result = false;
}
return result;
}
Смысл: проверить и/или получить некое исключение — исполняется оно в данный момент или нет.set_unexpected
set_terminate
uncaught_exception
в VC6 и в VC7 не работают.Chez, ICQ#161095094
Posted via:RSDN@Home;version:1.1.3;muzikstamp:Phlebotomized — Devoted To God
От: | 0xDEADBEEF | ||
Дата: | 06.10.05 21:51 | ||
Оценка: |
template<class T, class Filter>
class Something {
Filter filter_;
public:
X theMethod()
{
try {
T::DoSomethingDubious();//сделать что-то сомнительное
//(а не "дубовое", как вы могли подумать)
} catch(...) {
filter_();
}
}
};