C++模板特化的一个例子

例子来自libc++中unordered_map的实现
unordered_map__hash_table子成员:
image

查看其中__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;

模板特化的使用处来了
image
此处allocator_type在cpp20下没有rebind成员函数,依然可以正常通过编译,就是通过模板特化做到的。

posted on 2024-11-05 00:02  火焰龙卷风  阅读(6)  评论(0编辑  收藏  举报

导航