我碰到了这篇很棒的文章:http : //pdimov.com/cpp2/simple_cxx11_metaprogramming.html
在下面的代码中:
template<class A, template<class...> class B> struct mp_rename_impl;
template<template<class...> class C, class... T, template<class...> class B>
struct mp_rename_impl<C<T...>, B>
{
using type = B<T...>;
};
template<class A, template<class...> class B>
using mp_rename = typename mp_rename_impl<A, B>::type;
//...
mp_rename<mp_list<int, float, void*>, std::tuple>; // -> std::tuple<int, float, void*>
// T... will be deduced as int, float, void*
为什么Ç推导为mp_list(代替mp_list <整数,浮点,无效*> )和的...为整数,浮点,无效*?
我认为诀窍是模板专门化部分:struct mp_rename_impl <C <T ...>,B>,但是我很难理解为什么
与
mp_rename<mp_list<int, float, void*>, std::tuple>;
在
template<class A, template<class...> class B>
using mp_rename = typename mp_rename_impl<A, B>::type;
A
是mp_list<int, float, void*>
和B
是std::tuple
在
template<class A, template<class...> class B> struct mp_rename_impl;
A
是mp_list<int, float, void*>
和B
是std::tuple
相同的方式。
在专业化
template<template<class...> class C, class... Ts, template<class...> class B>
struct mp_rename_impl<C<Ts...>, B>
(我重命名为C
更清楚)
C
is mp_list
,Ts...
isint, float, void*
和B
is std::tuple
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句