
68
|
第
3
章
C++11
之所以要这么做,有其历史原因,不过我这里不打算展开(那是一篇枯燥的长
篇大论),反正由于标准委员会对于别名模板的好处后知后觉,所以他们到了
C++14
中才为
C++11
中的所有型别变换都加上了对应的别名模板。这些别名有一个公共形
式:每个
C++11
中的变换
std::transformation<T>::type
,都有一个
C++14
中名为
std::transformation
_t
的对应别名模板。下面的例子能够清楚说明我想表达的意思:
std::remove_const<T>::type
// C++11
:
const T
→
T
std::remove_const
_t
<T>
// C++14
中的等价物
std::remove_reference<T>::type
// C++11: T&/T&&
→
T
std::remove_reference
_t
<T>
// C++14
中的等价物
std::add_lvalue_reference<T>::type
// C++11: T
→
T&
std::add_lvalue_reference
_t
<T>
// C++14
中的等价物
C++11
的基础设施在
C++14
中仍然可用,但我不知道为什么你还会用它们。即使你
还没用上
C++14
,自行写出这些别名声明也是连小孩子都会的功夫。要用的只涉及
C++11
的语言特性,而且连小孩子也会照葫芦画瓢对吧?如果你有
C++14
标准的电
子版,那就更简单,只需要复制粘贴就可以了。我在这里把你扶上马送一程吧: ...