【问题标题】:c++ multiple template template parameterc++多模板模板参数
【发布时间】:2021-03-26 16:23:11
【问题描述】:

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

我试图做的是以下。我有

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, double, std::vector, std::deque>

我应该在我的模板定义中写什么?

【问题讨论】:

  • aClass&lt;int, double, std::vector, std::deque&gt; - 这不会编译。
  • 你的意思是没有办法使用模板模板参数来实现这样的事情吗?
  • 我的意思是上面不会编译。你想做一些不可能的事情。
  • 答案中的第二个示例确实编译通过。

标签: c++ c++11 templates


【解决方案1】:
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, class B, template<class...>class DA, template<class...>class DB>
class aClass {
  using DepA = DA<A>;
  using DepB = DB<B>;
  // ...
};

现在

aClass<int, double, std::vector, std::deque>

作品;注意

aClass<int, double, std::array, std::deque>

不起作用,因为array 采用非类型模板参数。

template<std::size_t N>
struct fixed_size {
  template<class T>
  using array = std::array<T,N>;
};

aClass<int, double, fixed_size<3>::template array, std::deque>

确实如此。

【讨论】:

  • 您的第一种方法无法编译:type/value mismatch at argument 3 in template parameter list
  • @user14063792468 澄清,我假设你在做一些与我第一种方法不同的事情。
  • "它没有得到你想要的语法" - end qoute。其他代码有效,令我惊讶的是,C++ 走了多远。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多