如何指定模板模板参数的最左侧模板参数?
B<int,T2>
是一个带有2个参数的模板类
E<H>
是一个接收“模板模板参数”H<T2>
的类
我想将B
传递到H
的{{1}}个广告位,例如:E<H>
,E<B<1>>
,E<B<2>>
等。
但是,我发现只有糟糕的工作,例如别名E<B<42>>
然后将B1<T>=B<1,T>
传递到B1
- 广告位: -
H
它有效(ideone demo),但我必须将我想要的那些别名,例如class D{}; //a library class
template<template<class T2>class H>class E{ //a library, don't modify me
//"H<T2>" is "B1<T2>" = "B<1,T2>"
H<D> h; //Here, T2=D, so "H<D>" = "B<1,D>"
};
template<int n,class T2> class B{}; //a user class
template<class T2> using B1 = B<1,T2>; //a user class
int main() {
E<B1> e; //I prefer to call it like E<B<1>>. (main objective)
//const int n=5;
//E<B<n>> en; //If it is possible, it would be nice. (side objective)
return 0;
}
,B1<T>
.... B2<T>
。
这种方法并不那么可爱。有更优雅的方式吗?
我知道Macro或X-Macro是一种可能的解决方案,但我尽量避免使用它。
答案 0 :(得分:5)
您无法编写模板别名别名。 B<1>
本身不能成为模板,这意味着您可以编写类似B<1><int>
的内容。这无疑是有用的。但您可以命名该中间模板:
template <int N>
struct X {
template <class T>
using apply = B<N,T>;
};
E<X<1>::apply> e;
这不是相当 E<X<1>>
,但它比写B1
,B2
,...