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) 编辑 收藏