Boost document show us how to implement a type converter
template<class A, template<class...> class B> struct mp_rename_impl;
template<template<class...> class A, class... T, template<class...> class B>
struct mp_rename_impl<A<T...>, B>
{
using type = B<T...>;
};
template<class A, template<class...> class B>
using mp_rename = typename mp_rename_impl<A, B>::type;
Function of this mp_rename is convert type A to type B.
Example :
mp_rename<std::pair<int, double>, std::tuple>
equal to
std::tuple<int, double>
As far as I know
mp_rename<std::pair<int, double>, std::tuple>
call
template<class A, template<class...> class B> struct mp_rename_impl;
After that forward to
template<template<class...> class A, class... T, template<class...> class B> struct mp_rename_impl<A<T...>, B>
My question is, why the compiler know it should forward to
template<template<class...> class A, class... T, template<class...> class B> struct mp_rename_impl<A<T...>, B>
and split class A into
template<class...> class A, class... T
Aucun commentaire:
Enregistrer un commentaire