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

C++ 多模板模板参数

如何解决C++ 多模板模板参数

我正在在线阅读一些参考资料,但我对模板模板参数感到困惑。特别是我不明白内部模板参数是如何根据它们的位置传递的。也许一个例子将有助于理解我的困惑

我想做的是以下内容我有

template <typename A,typename B,typename DepA,typename DepB>
class aClass {
   ...
};

我希望 DepA 必须有 A 作为模板参数和 DepBB。这样我想重铸

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

而是强制将 intdouble 作为第一个参数传递给第三个和第四个参数。

但是您希望模板为您注入它。要做到这一点:

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 举报,一经查实,本站将立刻删除。