加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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...>>{
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读