微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想让模板参数接受具有数字模板参数的模板.

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

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).

原文地址:https://www.jb51.cc/c/110485.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐