c – 模板化类,其参数必须是另一个模板化类
发布时间:2020-12-16 06:50:48 所属栏目:百科 来源:网络整理
导读:嗯,这就是我想要实现的目标.我有这样的结构: templatetypename...Ts struct s{ templateint...Is struct r { // whatever };}; 现在我想写一个模板化的结构: templatetypename r struct q{ //}; 模板应该接受struct r的特化,我想要访问这个实例化的模板参
嗯,这就是我想要实现的目标.我有这样的结构:
template<typename...Ts> struct s { template<int...Is> struct r { // whatever }; }; 现在我想写一个模板化的结构: template<typename r> struct q { // }; 模板应该接受struct r的特化,我想要访问这个实例化的模板参数. 让自己更清楚:我希望能够写出这样的东西: using some_specialisation_of_q = q< s<T1,T2,T3>::r<5,6,7> >; some_specialisation_of_q varname; 我希望能够在q的定义中访问T1,T3,5,7(或传递给specialized s和r的任何其他模板参数). 我的第一次尝试是这样的: template<template<typename...Ts> template<int...Is> typename R,typename= typename std::enable_if<std::is_same<R,s<Ts...>::r<Is...>>::value>::type> struct q { // } 但不幸的是,这会产生编译错误. 怎么能实现这一目标? 解决方法
首先,如果没有合作,就无法从r的专业化中推断出Ts ……所以让我们发布类型:
template<typename...Ts> struct s { template<int...Is> struct r { using outer_type = s; }; }; 然后用部分特化提取 template<class T,class = typename T::outer_type,class = T> struct q; template<template <int...> class R,class...Ts,int...Is> struct q<R<Is...>,s<Ts...>,typename s<Ts...>::template r<Is...>>{ }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |