【发布时间】:2018-01-05 11:17:23
【问题描述】:
Boost document 告诉我们如何实现类型转换器
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;
这个mp_rename的作用是将A型转换为B型。
例子:
mp_rename<std::pair<int, double>, std::tuple>
等于
std::tuple<int, double>
据我所知
mp_rename<std::pair<int, double>, std::tuple>
打电话
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>
我的问题是,为什么编译器知道它应该转发给
template<template<class...> class A, class... T, template<class...> class B> struct mp_rename_impl<A<T...>, B>
并将 A 类拆分为
template<class...> class A, class... T
【问题讨论】: