函数对象
对于使用过C++/CLI委托的开发者来说,函数对象并不是特别新的的东西,就像在C++/CLI中提供的类型安全的函数指针一样,委托不但提供函数调用服务还可以为这个服务提供参数用于函数执行。这一定义减小了使用函数指针所带来的风险,下面的代码演示了使用函数对象进行方法调用。
bool PrintData(int i, double d){
cout << i;
cout << endl;
cout << scientific << d;
cout << endl;
return true;
}
{
function<bool (int, double)> myPrint(PrintData);
bool res = myPrint(1, 2.0);
}
使用函数对象明显的好处就是减小了系统开销,myPrint在调用PrintData函数时候可以避免使用饱受争议且具有安全隐患的函数指针。
其他附加内容
TR1还更新了若干关于随机数发生器的标准类库,这其中包括一些随机数发生器如bernoulli_distribution, binomial_distribution, exponential_distribution, gamma_distribution, geometric_distribution, normal_distribution, and poisson_distribution等。分布类可以用于随机数的生成linear_congruential 和 mersenne_twister,下面的代码显示了使用mersenne_twister 运算法则和 gamma_distribution生成随机数
using namespace std::tr1;
...
//use TR1 typedef mt19937 for Mersenne twister algorithm
mt19937 randomAlg;
gamma_distribution <double> randomDist;
double d = randomDist(randomAlg);
在TR1中还有几个专门用于连接集合对象的新对象unordered_set, unordered_map, 和unordered_multimap,形如其名,这些集合对象不同于之前的STL中的set和map集合对象,它们不对数据排序,所以对它们的一般性操作,包括删除,插入和定位操作的时间负责度都是o(1),当然,缺点也十分明显,不进行排序的集合对象很难进行管理。
总结
TR1的这次更新使C++向着C++0x标准更近了一步,这一变化所呈现的C++标准变化将是革命性的,它为一如既往的强大C++语言诸如了新的特性,这使得这一语言在可预见的未来将变得更加流行。TR1既为使用托管代码开发的C++开发者提供了其早就期望的好处,也为那些依旧使用C++的软件产业提供了新的优势。
TR1在Visual C++ 2008中的发布是微软继续支持C++的有力证据,同时也显示了本地代码开发者依然有很好的前景。(这里针对使用托管代码开发者而言)