总览
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