设为首页 加入收藏

TOP

POCO C++库学习和分析 -- 异常、错误处理、调试 (二)
2014-11-24 03:15:31 】 浏览:9116
Tags:POCO 学习 分析 异常 错误 处理 调试
std::string& message()
返回在构造时传入的消息字符串
8. std::string displayText() const
同时返回异常名字和消息字符串,中间使用": "分隔
9. const Exception* nested() const
如果存在嵌套异常的话,返回之歌指向嵌套异常的指针,否则返回0
10. Exception* clone() const
返回一个异常的拷贝
11. void rethrow() const
重新抛出异常


定义自己的异常:
因为从Poco::Exception继承,去定义自己的异常时,工作非常的枯燥且重复(用户需要重载大量的虚函数),在库中提供了两个宏来完成这个工作:
POCO_DECLARE_EXCEPTION:用来申明异常宏
POCO_IMPLEMENT_EXCEPTION: 用来定义异常宏的执行体


两个宏分别定义如下:

[cpp]
// MyException.h
#include "Poco/Exception.h"
POCO_DECLARE_EXCEPTION(MyLib_API, MyException, Poco::Exception)

// MyException.h
#include "Poco/Exception.h"
POCO_DECLARE_EXCEPTION(MyLib_API, MyException, Poco::Exception)
[cpp]
// MyException.cpp
#include "MyException.h"POCO_IMPLEMENT_EXCEPTION(MyException, Poco::Exception,"Something really bad happened...")

// MyException.cpp
#include "MyException.h"POCO_IMPLEMENT_EXCEPTION(MyException, Poco::Exception,"Something really bad happened...")

宏展开分别为:
[cpp]
// MyException.h
#include "Poco/Exception.h"
POCO_DECLARE_EXCEPTION(MyLib_API, MyException, Poco::Exception)
class MyLib_API MyException: public Poco::Exception
{
public:
MyException();
MyException(const std::string& msg);
MyException(const std::string& msg, const std::string& arg);
MyException(const std::string& msg, const Poco::Exception& nested);
MyException(const MyException& exc);
~MyException();
MyException& operator = (const MyException& exc);
const char* name() const;
...
};

// MyException.h
#include "Poco/Exception.h"
POCO_DECLARE_EXCEPTION(MyLib_API, MyException, Poco::Exception)
class MyLib_API MyException: public Poco::Exception
{
public:
MyException();
MyException(const std::string& msg);
MyException(const std::string& msg, const std::string& arg);
MyException(const std::string& msg, const Poco::Exception& nested);
MyException(const MyException& exc);
~MyException();
MyException& operator = (const MyException& exc);
const char* name() const;
...
};
[cpp]
// MyException.cpp
#include "MyException.h"
POCO_IMPLEMENT_EXCEPTION(MyException, Poco::Exception,
"Something really bad happened...")
...
const char* MyException::name() const throw()
{
return "Something really bad happened...";
}
...

// MyException.cpp
#include "MyException.h"
POCO_IMPLEMENT_EXCEPTION(MyException, Poco::Exception,
"Something really bad happened...")
...
const char* MyException::name() const throw()
{
return "Something really bad happened...";
}
...

下面是一个例子:
[cpp]
#include "Poco/Exception.h"
#include
int main(int argc, char** argv)
{
Poco::Exception* pExc = 0;
try
{
throw Poco::ApplicationException("just testing");
}
catch (Poco::Exception& exc)
{
pExc = exc.clone();
}
try
{
pExc->rethrow();
}
catch (Poco::Exception& exc)
{
std::cerr << exc.displayText() << std::endl;
}
delete pExc;
return 0;
}

#include "Poco/Exception.h"
#include
int main(int argc, char** argv)
{
Poco::Exception* pExc = 0;
try
{
throw Poco::ApplicationException("just testing");
}
catch (Poco::Exception& exc)
{
pExc = exc.clone();
}

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDU1556 color the ball][树状数.. 下一篇poj3006 Dirichlet's Theorem..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目