美文网首页
一个伟大的想法

一个伟大的想法

作者: 我在东北玩泥巴_ | 来源:发表于2019-05-14 15:57 被阅读0次
    c++

            我有一个伟大的想法,就是设计一个类,将c++语言从强类型语言变成弱类型语言,虽然可能会效率变得慢一点,但是是一个相当有趣的尝试,同时也能使我对C++的理解更上一层楼,感觉不错。

            我想,如果定义一个这样的类,如果赋给它整型也没关系,赋给它字符串也没关系,赋给它数没关系,那么该怎么办呢?

            首先,我是想这么赋给它数组:

            MyValue mv({1,2,3,4})

            或者这么赋值:

            mv = {1,2,3,4}

            是不是很有意思?这个对C++语法来说,没见过这么做的,但是,这是可能的,在C++11里,就有一个东西std::initializer_list<XXXXX>可以这么实现,它是位于std下的。

            std::initializer_list 对象在这些时候自动构造:

            * 用花括号初始化器列表列表初始化一个对象,其中对应构造函数接受一std::initializer_list 参数

            * 以花括号初始化器列表为赋值的右运算数,或函数调用参数,而对应的赋值运算符/函数接受std::initializer_list 参数

            * 绑定花括号初始化器列表到 auto ,包括在范围 for 循环中

            总的来说,它是一个模板,可以用花括号来完成数据读取,底层代码究竟是什么样的就不详细研究了,它的特性是真的不错。

            但是有一个问题是,它只能特化成一个数据类型的,你想把数组由许多类型的函数组成,例如{1,'A', "hello", 1.234},拜托,不可能,它一初始化就只能初始化一个类型。

            这时候,它的类型就应该是MyValue类型,为什么呢?因为C++有一种隐性转换,如果MyValue的某一个构造函数中有这么一个基础类型处理,那么它就会调用这个构造函数从而生成这么一个对象,这个特性真的是太好了。现在试一试。

            但是现在有一个困难是,用不用把list将普通常量囊括在内?我想不应该,因为我在初始化的时候就已经用普通变量进行初始化的,如果再嵌套一个list,例如:

            {1, {1, 2, "Hello"}, 3, 4.5f}

            这样,我们先分析一下,对于单个的基础元素,嗯,可以自动初始化为MyValue,然后是一个list,它应该会自动调用MyValue(initializer_list<MyValue>),然后进行二次构造,应该没有问题吧?

            对于如何存储,我想先定义好各种类型,然后定义一个enum,初始化哪个就设什么enum,然后进行运算就可以了,内存会偏大是一定的,但是数组怎么存呢?最好定义一个自己的数组类MyArray,它类似于STL的vector(我们不用stl),在里面有各种各样的操作,vector已经做的够好了,现在重复造轮子有一种没有动力的感觉。

            因此最好自己的MyArray有什么新特性最好,就像python里的一样就好了,加上matlab数组的特性,支持end,负数,怎么方便怎么来,不错。

            另外,为了方便,int,float都是要重载的,哇塞,繁重的工作,如果有哪位小伙伴感兴趣的话,可以联系我,我们一块儿做呀。

    相关文章

      网友评论

          本文标题:一个伟大的想法

          本文链接:https://www.haomeiwen.com/subject/kizsaqtx.html