• 类variant解剖


    说明:由于代码较为庞大,类variant源码请参考eoslibrariesfcsrc中的variant.hpp与variant.cpp文件^_^.
     
     
    首先概览一下这个庞大的类,细数一下,包含24个构造函数,囊括了24个构造函数,复制构造函数,十几个有效值的判断,十来个的get函数,各种运算符的重载,右值引用,等等,类的内部还设计了一个访问者类,类外部再有对variant的重封装、定义,只为打造一个万能容器,能够存储任何类型的数据,下面来看看它是如何实现与工作的。
     
    1.支持类型的定义:
    从构造类型来看,从1,2,4,8各种字节的有符号和无符号类型、宽字节、符点型、bool类型、各种指针、string,拿一个实现的看看:
    this指针强转后赋值,那我们看看variant的成员变量:
     
    基本类型不会超过16个字节,是安全的,没有问题,后面还有一个操作,用来将来判断类型,如果资源需要释放,这里就起作用了:
    注意set_variant_type不是variant的成员函数,把数据类型的赋给了最后一个字节(这里说法不严格,自行理解…),此类的第一个走位。
    基本类型OK了,那么扩展类型呢,成员的内存不够用,只能用new了,如下:
     
    有一点,宽字节的字符串也转换成单节字字符串了再存储。有内存的分配就有释放:
    注意指针的强转,一定要保证自定义类型内存的正确释放和析构函数的调用。再看看数据的获取:
     
    这里代码很明显,对于带有数组类型性质的自定义类型,是支持下标操作的。还有一些带AS操作的类型转换函数:
     
     
    还有很多其它在fc命名空间下的全局函数:
    这里其实是搭配使用的,基本上实现任意类型之间的强转,引用一句话:强转是极度危险的,除非你自己知道自己在干什么^_^
    另外,variant还几乎重写了所有运行符重载:
     
    如此,我们也可以在这里增加自己的类型,实现数据的存储,是无限扩展,但可能也需要自己重写一部分的重载函数和运行符。
    这个类中还有一些的操作,以后有时间再回来看看。
     
  • 相关阅读:
    冬季小学期 NIIT公司 web前端培训 javascript
    冬季小学期 NIIT公司 web前端培训 CSS
    冬季小学期 NIIT公司 web前端培训 HTML
    操作系统 思维导图 百度脑图
    验证码识别系统以及人工智能总结 神经网络encog图像识别入门
    eclipse 常用操作 持续更新
    大话设计模式笔记 访客模式
    [百度杯-二月场](Misc-Web)爆破-2
    [百度杯-二月场](Misc-Web)爆破-1
    jdk1.7中的常量池
  • 原文地址:https://www.cnblogs.com/hbright/p/9234973.html
Copyright © 2020-2023  润新知