如何解决C++ 多模板模板参数
我正在在线阅读一些参考资料,但我对模板模板参数感到困惑。特别是我不明白内部模板参数是如何根据它们的位置传递的。也许一个例子将有助于理解我的困惑
template <typename A,typename B,typename DepA,typename DepB>
class aClass {
...
};
我希望 DepA
必须有 A
作为模板参数和 DepB
,B
。这样我想重铸
aClass<int,double,std::vector<int>,std::deque<double>>
只是为了
aClass<int,std::vector,std::deque>
我应该在模板定义中写什么?
解决方法
template <typename A,typename B,typename DepA,typename DepB>
class aClass;
template <class A,class...As,class B,class...Bs,template<class...>class DA,template<class...>class DB>
class aClass<A,B,DA<A,As...>,DB<B,Bs...>> {
// ...
};
是一种方法;这强制 DepA/DepB 将 A/B 作为第一个参数。它没有得到你想要的语法:
aClass<int,double,std::vector<int>,std::deque<double>>
而是强制将 int
和 double
作为第一个参数传递给第三个和第四个参数。
但是您希望模板为您注入它。要做到这一点:
template<class A,template<class...>class DB>
class aClass {
using DepA = DA<A>;
using DepB = DB<B>;
// ...
};
现在
aClass<int,std::vector,std::deque>
作品;请注意
aClass<int,std::array,std::deque>
不起作用,因为 array
采用非类型模板参数。
template<std::size_t N>
struct fixed_size {
template<class T>
using array = std::array<T,N>;
};
aClass<int,fixed_size<3>::template array,std::deque>
确实如此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。