我对typedef的理解是给一个声明一个别名.现在将这种int声明称为Integer.但为什么?为什么有人会使用typedef?什么是更有利的原因?
typedef int Integer;
Integer blamo = 50;
cout << blamo << endl;
Run Code Online (Sandbox Code Playgroud)
ten*_*our 19
这不是一个好例子,因为Integer并int没有任何不同的含义.但想象一下,
typedef int BlamoType;
Run Code Online (Sandbox Code Playgroud)
现在,将来'blamo'变为64位整数时,您可以更改此typedef,并且所有其他代码保持不变.
typedef的另一个原因是缩短类型名称.例如,而不是
boost::shared_ptr<std::map<std::wstring, std::vector<int> > > blamo1;
boost::shared_ptr<std::map<std::wstring, std::vector<int> > > blamo2;
std::vector<boost::shared_ptr<std::map<std::wstring, std::vector<int> > > > blamoList;
Run Code Online (Sandbox Code Playgroud)
你可以做:
typedef boost::shared_ptr<std::map<std::wstring, std::vector<int> > > BlamoType;
BlamoType blamo1;
BlamoType blamo2;
std::vector<BlamoType> blamoList;
Run Code Online (Sandbox Code Playgroud)
ybu*_*ill 11
这里没有人提到的原因是:编写通用代码.考虑像某些容器的实现std::vector.它应该有一个类型,std::vector<T>::value_type所以任何编写通用代码的人都可以使用它:
template<class Container> void f(const Container &c)
{
typename Container::value_type v = c.back();
// ...
}
Run Code Online (Sandbox Code Playgroud)
你怎么能在课堂上介绍这样的类型?唯一的方法是typedef:
// !!!EXPOSITION ONLY!!!
template<class T> class vector
{
public:
typedef T value_type;
// ...
};
Run Code Online (Sandbox Code Playgroud)