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

c – 如何使模板模板参数取数值?

发布时间:2020-12-16 03:42:44 所属栏目:百科 来源:网络整理
导读:我想让模板参数接受具有数字模板参数的模板. 这个例子可能过于简单了,但我喜欢这样的东西: template int Xstruct XX{ static const int x = X;};templatetypename TT,TT V,templateV TXvoid fnx(TXV x){ static_assert(V == TX::x,"IMPOSSIBLE!");}void fny
我想让模板参数接受具有数字模板参数的模板.

这个例子可能过于简单了,但我喜欢这样的东西:

template <int X>
struct XX
{
  static const int x = X;
};

template<typename TT,TT V,template<V> TX>
void fnx(TX<V> x)
{
  static_assert(V == TX::x,"IMPOSSIBLE!");
}

void fny()
{
  fnx(XX<1>())
}

我不能理解这个的语法,因为它必须是可能的.我怎么做到这一点?

解决方法

只是稍微修改一下你的语法 – 因为模板模板参数设置不正确,我们最终会得到这样的结果:
template <typename T,template <T > class Z,T Value>
//                    ^^^^^^^^^^^^^^^^^^^^^
void foo(Z<Value> x) { }

但是,编译器不能在这里推断出T – 它是一个非推导的上下文.你必须明确提供它:

foo<int>(XX<1>{});

这很烦人.我甚至不能写出类型特征,使得non_type_t< XX< 1>>是int(其中该类型trait对类型进行实际内省,而不是简单地返回int的东西).

有一项建议是通过修改非类型模板参数的非推断上下文来改进此过程(P0127).

(编辑:李大同)

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

    推荐文章
      热点阅读