c++11和boost库增加许多关于类型推导(编译期)的关键字和类型, 用好这些机制, 对于编写项目的一些组件帮助颇大。正所谓工欲善其事,必先利其器。

1、初始化某种类型的变量

auto var = expression;

2、推导表达式类型

decltype(expression) var;

decltype很重要的一个用途就是配合auto使用, 推导函数的返回值。

template<class U, class V>  
auto Multiply(U u, V v) -> decltype(u*v)    // Note -> after the function bracet.  
{   
      return u*v;  
}

需要注意的是, decltype不会执行表达式而auto会。

3、推导一个调用表达式的返回类型

result_of是boost库中的一个小组件, 使用的时候需要

#include <boost/utility/result_of.hpp>

附带说一下, c++对于RTTI(Run Time Type Identification)的支持, 提供了两个操作符:dynamic_cast和typeid,一个类型:type_info。

msdn对于typeid的说明:

typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。 type_info在typeinfo头文件中定义:

 type_info {
:
~type_info();
== ( type_info& rhs) ;
!= ( type_info& rhs) ;
before ( type_info& rhs) ;
* name() ;
:
type_info ( type_info& rhs);
type_info& = ( type_info& rhs);
}; dynamic_cast作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理,
       即会作一定的判断。
       对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
       对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。
注意:dynamic_cast在将父类cast到子类时,父类必须要有虚函数。
dynamic_cast会用到RTTI技术,因此需要启动“运行时类型信息”这一选项
05-11 15:25
查看更多