C++的大统一数据结构:var.cpp

485 阅读2分钟

C++课程学完也已经有几周的时间了,在C++课程里,我实现了一个自己的字符串类MyString,在里面我实现了不少自以为很实用的小功能,例如字符串转浮点数之类,但是我的野心不止于此,我的终极目标是想重载完所有的基础数据结构,让这些基本数据结构变得又稳定,又功能强大。例如,整型可以理论上无限长度,可以进行高精度计算,浮点数也支持超长数字计算,任何数据结构都有一个toString()函数,print()函数可以实时打印出任何数据结构,等等。

实际上,我的愿望不止于此,我希望能够造出一个大统一数据结构:MyVal类,任何数据结构都可以用它来代替,就像JavaScript,python一样,在损失一丢丢的性能的情况下,大幅度简化C++编程,结合自己之前制作的数据结构重构,例如MyInt,MyFloat,MyChar,MyArray,MyString等,最终实现一个超级赞的MyLib库,我觉得这是一个造福人类的事情。。。

后来发现,在boost中貌似也有类似的东西。。。但是作为一个磨练自己技术的机会,我觉得这个项目还是很有必要的,后来在实际操作中发现,编写这么一个大统一数据结构的确是有点难(重复造轮子永远是难的),因此我退而求其次,只用最基本的数据结构,来实现自己的统一数据结构类,var类,我觉得应该不会太难。

关于我对var.cpp的期待,有如下几点:

包含数据结构

  • 整型
  • 布尔型
  • 浮点型
  • 字符型
  • 数组
  • 单元数组(可以包含不同数据结构的元素)
  • 字符串
  • 字典
  • 位(就是一个bit)
  • NULL型

初始化

初始化应该十分简洁优美,没有多余的东西,例如:

var v1 = 1;
var v2 = 1.0;
var v3 = false;
var v4 = "abcd";
var v5 = {1, 2, 3, 4}; // 也可以:var v5({1, 2, 3, 4});
var v6 = {1, 1.0, "abcd", {2,3,4}, v3};

对于这个单元数组,在C++11有一个新特性,可以实现这么写,我以后再更具体地细节。

数据结构转换

数据结构转换功能应该十分强大,任何数据结构都能够toString(),可以被printf()出来,同样的,各个数据结构之间也能够相互转换,通过toInt(),toFloat()等函数进行转换,另外,还能实现隐式转换,例如,一个整型与字符型相加,不会报错,而是把整型转换成字符串型,然后再拼接,最后得出一个字符串型。

现在想到的就是这么多,以后有什么新想法再慢慢更。。。