typedef不支持模版化,而别名(alias)支持模版化
template<typename T>
using MyAllocList = std::list<T, MyAlloc<T>>;
// 只能指定具体的类型std::unordered_map<std::string, std::string>
typedef std::unique_ptr<std::unordered_map<std::string, std::string>> UPtrMapSS;
std::remove_const<T>::type // C++11: const T → T
std::remove_const_t<T> // C++14 equivalent
std::remove_reference<T>::type // C++11: T&/T&& → T
std::remove_reference_t<T> // C++14 equivalent
std::add_lvalue_reference<T>::type // C++11: T → T&
std::add_lvalue_reference_t<T> // C++14 equivalent
- 使用alias,可以不使用typename来标识dependent type
template<typename T>
struct MyAllocList {
typedef std::list<T, MyAlloc<T>> type; // type属于dependent type,因为它依赖于T
};
template<typename T>
class Widget {
private:
typename MyAllocList<T>::type list; // 必须使用typename,因为在模版里用到了type,它属于dependent type
};
// 使用alias,省去了typename的使用
template<typename T>
using MyAllocList = std::list<T, MyAlloc<T>>;
template<typename T>
class Widget {
private:
MyAllocList<T> list;
};
#C++##面试##求职##我的实习求职记录##我的求职思考#