我想让模板参数接受具有数字模板参数的模板.
这个例子可能过于简单了,但我喜欢这样的东西:
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的东西).