zoukankan      html  css  js  c++  java
  • ACE服务端编程2:ACE跨平台之数据类型和宽字符

    ACE网络库的主要优势之一就是跨平台,ACE提供了操作系统API和编译器级别的跨平台解决方法,使开发人员不用再去关心操作系统和编译器的差异,但因此也带来了ACE的复杂性。

    ACE网络库的组织结构主要分为四层:OS适配层、wrapper facade层、框架层、服务层,其中OS适配层为操作系统API提供了包装函数,保证了系统级的跨平台特性。

    而不同的C++编译器在以下方面也有明显的差异:

    1、模版;

    2、数据类型和宽字符;

    3、运行时初始化和关闭;

    4、分配堆内存;

    以上主要参考自APG里内容,但APG有些过于陈旧,例如其中提到的ACE_OS为了避免编译器不支持命名空间,使用类来实现,而在ACE的新版本中已改为命名空间实现。

    本文主要讨论数据类型和宽字符的ACE跨平台解决方式,基于ACE 6.0版本,ACE的编译方法可以参考之前写的http://www.cnblogs.com/ym123/p/4277256.html

    数据类型


    不同的C++编译器的基本数据不同,通常通过预定义类型来解决此,这也是C++常用技巧。

    ACE也定义了常用的基本类型:

    ACE_INT8、ACE_INT16、ACE_INT32、ACE_INT64和无符号ACE_UINT8、ACE_UINT16、ACE_UINT32、ACE_UINT64;

    同时ACE还提供了SIZEOF的定义,可以方便获得该类型在编译器的长度:

    ACE_SIZEOF_LONG、ACE_SIZEOF_INT、ACE_SIZEOF_CHAR...

    ACE还提供了大尾和小尾的定义:

    ACE_BYTE_ORDER,其值是ACE_BIG_ENDIAN或是ACE_LITTLE_ENDIAN;

    如果数据类型的尺寸对你的程序很重要,就不应该依赖编译器的硬件尺寸而是使用这些基础类型,例如常见的确定TCP数据包内容长度的头尺寸,就应该明确长度。

    这些类型定义在ace/Basic_Types.h头文件中。

    窄字符和宽字符


    ACE定义了两个常量:

    ACE_HAS_WCHAR 用于启用ACE的宽字符配置;
    ACE_USES_WCHAR 用于指示ACE在内部使用宽字符配置。

    这两个常量在编译ACE网络库时起作用,如果想使用宽字符,编译ACE时在config.h中输入:

    #define ACE_HAS_WCHAR

    #define ACE_USE_WCHAR

    ACE定义了ACE_TCHAR类型,根据ACE_USES_WCHAR使用char或者wchar_t;

    ACE_TEXT(str),根据ACE_USES_WCHAR正确定义字符串文本;

    ACE_TEXT_CHAR_TO_TCHAR(str),如果需要,把char * 转换为ACE_TCHAR;

    ACE_TEXT_WCHAR_TO_TCHAR(str),如果需要,把wchar_t *转换为ACE_TCHAR;

    ACE_TEXT_ALWAYS_CHAR(str),如果需要,把ACE_TCHAR转换为char *;

    ACE定义了ACE_CString和ACE_WString类型,存取窄字符串和宽字符串,具体用法与std::string类型相似,定义在ace/SString.h头文件中。

    ACE解决其他三个编译器差异的实现在后续博文中讲解。


    记录,为更好的自己!

  • 相关阅读:
    F. Journey
    D. Divide
    C. Counting Pair
    A. A Big Dinner
    E
    D -Sale
    第十三课 历史记录画笔工具
    第十二课 文字工具
    第十一课 模糊工具、海绵工具、仿制图章工具
    第十课 切片工具 修复画笔工具 修补工具 颜色替换工具
  • 原文地址:https://www.cnblogs.com/ym123/p/4519030.html
Copyright © 2011-2022 走看看