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

前端之家收集整理的这篇文章主要介绍了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).

猜你在找的C&C++相关文章