C++0x设计之路(5)

2008-03-28 07:32:54来源: 阅读 ()

新老客户大回馈,云服务器低至5折

lock-in机制。(The alternative is vendor lock-in

 

一个例子:范型编程支持

 

考察下面的代码:

 

template<class T> class vector {

 

    // ...

 

    void push_back(const T&) { /* _ */ }

 

    // ...

 

};

 

vector<double> v;

 

v.push_back(1.2);

 

v.push_back(2.3);

 

v.push_back(3.4);

 

这里基本上就是对模板和STL的应用。通过大规模的现实世界的应用和大量的实验,我们可以对那些成功的非常有弹性的语言特性和编程技术进行深入的思考;请参考STLBoost。特定地,在效率成为关键问题时,模板已经成为了标准的解决方案。那么,在C++0x中我们如何才能做得更好?这里的更好,我的意思是如何在与C++98相较没有效率损失的情况下,获得更优雅的表现形式;而现有的方式又有何问题?说得更具体一点,上面给出的这个vector的例子是否能够进一步改善?那些重复使用的push_back()即烦人又丑陋,而没有明确指出元素类型则让出错信息复杂难解,更完美的情况下,我还不想暴露push_back()的实现。一个更好的版本的代码可以是这样的:

 

template<Value_type T> class vector {

 

    // ...

 

    void push_back(const T&); // just the declaration

 

    // ...

 

};

 

vector<double> v;

 

v.push_back(1.2);

 

v.push_back(2.3);

 

v.push_back(3.4);

 

这里,使用Value_Type来指定元素类型T是一个“concept”;指明了vectorT所作的所有假设。在此基础上,我们可以校验double是一个Value_type,我们可以在没有push_back()定义的情况下对v作类型检查。当然,如果我们想要在线化,那我们需要定义push_back(),可这已经成为实现细节,无需考虑了。Concepts的概念使得我们可以在各转换单元内独立地进行类型检查,而无需引入模板参数的一整套的类型信息;并且有助于提高使用模板时的编译期效率。

 

那我们如何才能移除对push_back()的重复调用呢?我们可以允许vector利用一个初始化链作为其参数。这要求提供一个以初始化链做参数的构造函数。例如:

 

template<Value_type T> class vector {

 

    // ...

 

    vector(const T*, const T*); // sequence constructor

 

    // ...

 

};

 

vector<double> v = { 1.2, 2.3, 3.4 };

 

      concepts和通用的初始化链的细节问题仍然在紧张的讨论之中。这里的重点不是细节,而是我认为这些通用设施与C++0x实际上休戚相关。

 

会发生吗?

 

       我认为C++0x将会很清晰地展示出这里给出的“概要原则”。然而,资源的匮乏(时间,人力以及其他)限制了我们的能力,并且很明显,我们将会犯一些错误。同样的,一些“随机扩充”也会趁机混入其中,在整个语言中形成一些“古怪的孤岛”(就如同CC++中的枚举一样多!)。尽管如此,对于整个C++用户群及其更多的将来的用户而言,仍然有理由期待,C++0x将是对现有C++的一个重大的改进。

参考文献

 

[1] “Standard for the C++ Programming Language,” ISO/IEC 14882.

 

[2] The C++ Standard (ISO/IEC 14882:2002), Wiley, 2003. ISBN 0-470-84674-7.

 

[3]Stroustrup, B. The Design and Evolution of C++, Addison-Wesley, 1994. ISBN 0-201-54330-3.

 

[4]Stroustrup, B. “Learning Standard C++ as a New Language,” C/C++ Users Journal, May 1999 (http://www.research.att.com/~bs/ papers.html).

 

[5] Stroustrup, B. The C++ Programming Language

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C++ 0x 里的垃圾收集器

下一篇: Visual C 设计UDP协议通讯示例