可变参数模板类型推导

斯蒂芬·莫利纳(Stephane Molina)

我碰到了这篇很棒的文章: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>,但是我很难理解为什么

贾罗德42

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;
    

    Amp_list<int, float, void*>Bstd::tuple

  •  template<class A, template<class...> class B> struct mp_rename_impl;
    

    Amp_list<int, float, void*>Bstd::tuple相同的方式。

  • 在专业化

    template<template<class...> class C, class... Ts, template<class...> class B>
    struct mp_rename_impl<C<Ts...>, B>
    

    (我重命名为C更清楚)
    Cis mp_listTs...isint, float, void*Bis std::tuple

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章