总览

liuzianglib 提供两种通用数据类型的实现。

类名 支持的类型 实现
var 绝大多数 POD 类型 将该类型转换为字符串保存在内部,不支持无法转换为字符串的类型。
Any 所有 C++ 类型,包括用户定义类型 利用 C++ 多态性实现。

示例

var 示例:

      
#include "iostream"
#include "string"
#include "DC_var.h"//包含这个 liuzianglib 头文件

int main() {
    DC::var v1, v2;
    v1 = 1;//将一个 int 类型的值放入 v1
    v2 = "2.5";//将一个 const char[] 类型的值放入 v2

    double result_num = v1.as_double() + v2.as_double();//将 v1 与 v2 作为数字相加
    std::string result_str = v1.as_string() + v2.as_string();//v1 与 v2 作为字符串,将 v2 接在 v1 末尾

    std::cout << result_num << "\n" << result_str;
}
      

运行结果:

      
      3.5
      12.5   
      

Any 示例:

      
#include "iostream"
#include "DC_Any.h"//包含这个 liuzianglib 头文件

class a {
public:
    void print() {
        std::cout << "a::print():这是类 a\n";
    }
};

class b {
public:
    void print() {
        std::cout << "b::print():这是类 b\n";
    }
};

int main() {
    DC::Any v1;
    a obj_a;
    b obj_b;

    v1.set(obj_a);//将 obj_a 放入 v1
    std::cout << "类型信息:" << v1.type().name() << "\n";//输出 v1 类型信息
    v1.get<a>().print();//从 v1 中取出 obj_a 的拷贝,并调用 obj_a::print()

    v1.set(obj_b);//将 obj_b 放入 v1
    std::cout << "类型信息:" << v1.type().name() << "\n";//输出 v1 类型信息
    v1.get<b>().print();//从 v1 中取出 obj_b 的拷贝,并调用 obj_b::print()
}
      

运行结果:

      
      类型信息:class a
      a::print():这是类 a 
      类型信息:class b
      b::print():这是类 b     
      

以上就是 liuzianglib 中的两个通用数据类型的简单使用例子。

头文件与命名空间

var 在 DC_var.h 中,Any 在 DC_Any.h 中。这两个类都在名称空间 DC 中。

其它

DC::Any 参考了 Boost::any 的源代码。

API 文档

var(未完成)
Any