【问题标题】:how can i pass template class which take parameter pack to other template class as a parameter?如何将带有参数包的模板类作为参数传递给其他模板类?
【发布时间】:2020-06-04 17:20:35
【问题描述】:

我有类似的东西:

template<int ... args>
class X{};

并希望将该类作为参数传递给第二个模板类。 现在我有:

template<class X<int... args1> el1, class X<int... args2> el2>
class Y{};

编译器向我抛出错误Pack expansion does not contain any unexpanded parameter packs,我真的不知道我该怎么办...我已经尝试了很多int ...args 的可能顺序,但它仍然不是在职的。我怎样才能让它工作?

我想做这样一段代码编译

Y<X<1,2>,X<3,4>> el;

【问题讨论】:

  • 请在问题中包含错误
  • 如果你只想使用类名而不是模板参数,你可以直接使用template&lt;class el1, class el2&gt; class Y{}
  • 我需要访问 args
  • 请用用例编辑你的问题,即你想如何使用这个类。

标签: c++ templates c++17 variadic-templates


【解决方案1】:

您似乎正在寻找template template parameters,其语法如下:

template<template <int... args1> typename el1, 
         template <int... args2> typename el2>
class Y{};

请注意,在 c++17 之前,您必须在此处使用关键字 class 而不是 typename

【讨论】:

  • 但我想指定该模板仅采用 X 类的参数,这可能吗?
  • @MichałOlbrychtowicz 我不确定您所说的“由 X 类制成的参数”是什么意思。你能用一些特定的用例编辑你的问题吗?即你想如何使用XY
  • 完成,我的意思是我希望 Y 类仅采用 X 类的参数,而您的示例让 Y 类采用任何类的两个参数,其中使用整数参数包
  • 好的,这可能是可行的,但这听起来确实像xy problem。你能用这个模板分享你想做什么吗?展示你的用例,这样你会得到更好的答案。
  • 没必要,只是我的心血来潮。我只是好奇我是否可以这样做。我已经以你写的方式成功了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多