C++模板特化的一个例子
例子来自libc++中unordered_map的实现
unordered_map中__hash_table
子成员:
查看其中__allocator_type
的定义,相关的类如下
struct __rebind_alloc_helper {
using type _LIBCPP_NODEBUG = typename _Traits::template rebind_alloc<_Tp>;
}
template <class _Alloc>
struct _LIBCPP_TEMPLATE_VIS allocator_traits {
template <class _Tp>
using rebind_alloc = __allocator_traits_rebind_t<allocator_type, _Tp>;
}
template<class _Alloc, class _Tp>
using __allocator_traits_rebind_t = typename __allocator_traits_rebind<_Alloc, _Tp>::type;
模板特化的使用处来了
此处allocator_type
在cpp20下没有rebind成员函数,依然可以正常通过编译,就是通过模板特化做到的。