文章写到这里Foundation库中的功能已经介绍过半了。在接下去介绍其他模块之前我们先来回顾一下前面的内容。前面的内容包括了:
有了这些模块我们就可以搭建起一个本哋程序的框架了(当然这不包括绘图和显示,Poco库不提供这些功能)程序的框架很重要,就如同人的骨架和血液一样决定了一个程序的结构,间接的影响了程序的可修改性和可维护性但这还不够,要写出一个完整的程序我们还需要其他的一些部分,这些部分也很重要就洳同人的肌肉和衣服。
1.2 主机序和网络序
(x86系统是小端字节序系统)
1.3 主机序和网络序和大头小头引起的问题
如果在两台字节序不同的主机之间进荇网络通讯大小字节序的问题就会出现。通常的做法是在小字节序一端的主机进行处理(网络序始终是大字节序)小字节序的主机在發送数据前,转换数据为大字节序而在接受时,把大字节序数据转成小字节序
Poco中的Any类,来自于Boost库中的Any类Any类主要用于数据库读取时的數据保存和解析。它能够将任意类型值保存进去并能把任意类型值读出来。Boost::any的作者认为所谓generic type有三个层面的解释方法:
3. 对包含值类型不加区别,例如把所有保存的值强制转换为void *保存读取时再有程序员判断其类型。这样效率虽最高但无法保证类型安全
boost::any就选择了第二层面的設计思路它允许用户将任意类型值保存进一个any类型变量,但内部并不改变值的类型并提供方法让用户在使用时主动/被动进行类型判断。关于Poco::Any的进一步描述和实现技巧可以看刘未鹏大大的《
首先它支持有限类型之间的自动类型转换,可以保存一个(int)5进去读一个(string)"5"出来。所謂有限类型很好理解因为类型转化的本质是对内存数据的不同解释,如果转化前的数据类型和转化后的数据类型都是不定且无限作为類的书写者,实在是不能想象的而有限类型的转化至少我们可以枚举,而事实上这正是Poco::DynamicAny实现时所做的Poco::DynamicAny支持Int8、Int16、Int32、Int64UInt8、UInt16、UInt32、UInt64、bool、float、double、char、std::string、long、unsigned
看到这里,我们实际上就明白了Poco::DynamicAny和Poco::Any的使用场景对于用户自建数据类型,毫无疑问只能使用Poco::Any类而对于C++语言内置的数据类型,使用Poco::DynamicAny因為Poco::DynamicAny不仅对于内置数据类型提供了类似Poco::Any的接口,而且还提供了相互之间的转换功能
在Poco::DynamicAny的实现上,使用了模板特化技术用于在不同数据类型之间的转换,关于这一点也可以理解成枚举。实质上就是说把程序员在不同数据间的转换工作在Poco::DynamicAny类中先实现了一遍程序员只需要直接调用Poco::DynamicAny就可以了。
(版权所有转载时请注明作者和出处 )