随笔 - 67  文章 - 79  trackbacks - 0
<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(1)

随笔档案

文章档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

c++0x标准中的那个x终于定下来了, 不出意外,就是9。于是新版C++,也就是09版,赶在了最后一刻出炉了。
C++0x 去年就开始研究了,这东西是越看越头痛,学到了几个呼声很高的简化编码的改进。

auto:
C++中迭代器最让人诟病的 就是那冗长繁琐的声明。像这样: std::vector<int>::iterator iter= v.begin(); 我们的主要目的是声明iter=v.begin(),但是却要写常常的一串std::vector<int>::iterator 篇幅比主角要多好多。这还算比较简单的声明,如果是boost里面的库,有些类型声明基本不是人能写出来的。于是,为了响应广大群众的呼声,新标准改进了auto关键字,现在可以这样写
auto iter=v.begin(); 具体的类型声明交给编译器去推断了,这本来就是它最擅长的地方。

Variadic templates
模板技术的出现带来了范型程序设计的发展,但是模板原本的一些限制,制约了很多美好的梦想。看看boost里面的tuple和functional,虽然有简单方便的使用接口,内部的实现却晦涩难懂,以至于使用时,如果编译器爆出了错误,其信息往往让人云里雾里,不知所云。为了解决这些问题制约,新标准提出了不少语法新特性,Variadic templates 可变模板类型参数就是很 有意义的一项新特性。
现在一行代码就可以搞定原先 要用宏,元编程等伤脑筋的技术才能解决的“小问题”。
#include <iostream>
#include 
<string>
#include 
<tr1/memory>
#include 
<boost/typeof/typeof.hpp>

template
<typename T>
std::tr1::shared_ptr
<T> New(){
    
return std::tr1::shared_ptr<T>(new T());
}

template
<typename T,typename Args>
std::tr1::shared_ptr
<T>  New(Args args){
    
return std::tr1::shared_ptr<T>(new T(args));
}

int main(){
    BOOST_AUTO(p1,New
<int>());
    BOOST_AUTO(p2,New
<int>(1));
    BOOST_AUTO(p3,New
<std::string>("hello world"));
    std::cout
<<*p1<<std::endl;
    std::cout
<<*p2+*p2<<std::endl;
    std::cout
<<p3->c_str()<<std::endl;
}
上面的代码 解决了小问题 了却了大麻烦


posted on 2009-04-27 10:59 zarra 阅读(223) 评论(1)  编辑  收藏

FeedBack:
# re: c++0x?c++09[未登录] 2009-04-27 18:41 apple
研究得好深~~今天看着你写得代码,依然一头雾水,一年来都没什么长进~~好惭愧好惭愧。。。。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: