2024年3月29日发(作者:)

POCO C++库导游

2010年07月16日 星期五 15:23

POCO C++库导游

Introduction

A Guided Tour of the POCO C++ Libraries

简介

POCO C++库是开源的用于简化和加速C++开发面向网络、可移植应用程序的C++

库集,POCO库和C++标准库可以很好的集成并填补了C++标准库缺乏的功能空隙。

POCO库的模块化、高效的设计及实现使得POCO特别适合嵌入式开发。在嵌入式

开发领域,由于C++既适合底层(设备I/O、中断处理等)和高层面向对象开发,

越来越流行。当然POCO也准备好了面对企业级挑战。

包含4个核心库及一些附加库. 这4个核心库是: Foundation, XML, Util 和

Net. 附加库中其中2个是NetSSL和Data,NetSSL为Net库中的网络类提供SSL

支持, Data库提供访问不同SQL数据库的一致性接口。 POCO以网络中心的跨平

台C++软件开发,就像苹果的Cocoa之余Mac开发, 或Ruby on Rails 之余Web

开发—强大而不失简单有趣的用于创建应用的平台. POCO 严格使用标准

ANSI/ISO C++创建, 包含标准库. 程序库的贡献者试图在使用C++高级特性、易

于理解的类、干净的代码、连续及易于维护间得到平衡.

Foundation基本库

Foundation库是POCO的心脏.它包含底层平台的封装层,也包含经常使用的工具

类和函数. 包含规定字节大小整数类型, 转换整数与字节顺序的函数,

Poco::Any 类 (基于 boost::any), 错误处理及调试工具, 包含各种异常类和

支持断言. 同时也包含一些内存管理类, 包括基于引用计数的智能指针,和用与

buffer管理及内存池的类. 对于字符串的处理, POCO包含一些函数和其他的东

西, 串trim操作, 大小写敏感的比较和大小写转换. 以类对Unicode的基本支

持:转换文本的不同编码, 包括UTF-8 和 UTF-16. 支持格式化和解析数字, 包

括sprintf 的类型安全变量. 还提供了基于著名的PCRE 库

()的正则表达式。

POCO提供多种变量的日期和时间的处理类。在访问文件系统方面, POCO 拥有

Poco::File 、 Poco::Path 类, 和 Poco::DirectoryIterator 类.在许多应用

程序中,其中一部分需要通知其他部分自己这边发生的事情. POCO中的

Poco::NotificationCenter、 Poco::NotificationQueue 和 events (类似 C

# events) 使这种工作变得容易. 下面的示例显示如何使用POCO的 events. 示

例中, 类Source 的公共event命名为theEvent,该event有一个int型参数. 用

户可调用操作符 +=订阅改事件和调用-=操作符取消订阅, 同时传递对象指针和

成员函数指针.事件可通过调用()操作符发射, 见 Source::fireEvent().

#include "Poco/BasicEvent.h"

#include "Poco/Delegate.h"

#include

using Poco::BasicEvent;

using Poco::Delegate;

class Source{

public:

BasicEvent theEvent;

void fireEvent(int n){

theEvent(this, n);

}

};

class Target{

public:

void onEvent(const void* pSender, int& arg){

std::cout << "onEvent: " << arg << std::endl;

}

};

int main(int argc, char** argv){

Source source;

Target target;

nt += Delegate(&target,&Target::onEvent);

ent(42);

nt -= Delegate(&target,Target::onEvent);

return 0;

}

POCO 中的stream类已经提到过. stream作为Poco::BinaryReader 和

Poco::BinaryWriter 的参数用于写二进制数据到流中, 自动、透明地处理字节

顺序问题.

在复杂的多线程应用中,查找问题和bug的仅有方式就是编写广泛的日志信息.

POCO 提供强大可扩展的日志框架,该框架支持过滤、路由到不同的通道以及格

式化日志信息. 日志消息可以写入console、文件、Windows 事件日志、Unix

的syslog后台或网络中.如果POCO提供的通道不够使用,可以很方便的使用新

类扩展日志框架.

对于在运行时装载(及卸载) 共享库, POCO提供底层的Poco::SharedLibrary

类. 基于它的Poco::

classLoader 类模板和支持框架, 允许在运行时动态装载和卸载C++类, 类似

于JAVA和.NET. 类装载框架使得以平台无关的方式编写应用程序插件成为小菜

一碟。

最后, POCO Foundation 包含在不同级别上的多线程封装. 从Poco::Thread 类

和一般同步原子(Poco::Mutex, Poco::ScopedLock, Poco::Event,

Poco::Semaphore, Poco::RWLock), Poco::ThreadPool 类及支持thread-local