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头文件中定义:
class type_info {
public:
virtual ~type_info();
bool operator== (const type_info& rhs) const;
bool operator!= (const type_info& rhs) const;
bool before (const type_info& rhs) const;
const char* name() const;
private:
type_info (const type_info& rhs);
type_info& operator= (const type_info& rhs);
};
dynamic_cast作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理,
即会作一定的判断。
对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。
注意:dynamic_cast在将父类cast到子类时,父类必须要有虚函数。
dynamic_cast会用到RTTI技术,因此需要启动“运行时类型信息”这一选项