泛型 _Get_deleter_pointer_type

来源:互联网 发布:cocos2d js 粒子效果 编辑:程序博客网 时间:2024/05/19 20:42

                    在分析  Unique_ptr的 遇到了 _Get_deleter_pointer_type  百思不得其解

                    所以把这个代码抠出来,测试了一下,终于明白了,写到博客上便于以后查找。

template <class _Ty>struct MyPointer{typedef _Ty* pointer;};template <class _Ty>struct _MyIdentity{typedef _Ty type;};struct _MyWrap_int{_MyWrap_int(int){}};template<class _Val, class _Ty>struct _Get_My_pointer_type{template<class _Uty>static auto _Fn(int)->_MyIdentity<typename _Uty::pointer>;template<class _Uty>static auto _Fn(_MyWrap_int)->_MyIdentity<_Val*>;typedef decltype(_Fn<_Ty>(0)) _Decltype;typedef typename _Decltype::type type;};void main(){_Get_My_pointer_type<int, MyPointer<char>>::type pc;   //  pc 类型  char*_Get_My_pointer_type<int, char>::type pi;// pi 类型  int*char c; int i;pc = &c;pi = &i;}

_Get_My_pointer_type  应该是首选查找   _Fn(int)   如果传入的_Ty 存在  _Ty::pointer  就选择  _Fn(int)

                                      否则选择              _Fn(_MyWrap_int)

在标准库中,类似  _Get_My_pointer_type 很多

原创粉丝点击