【问题标题】:Is there any proposal in the pipeline to allow any parameter in a template?是否有任何提议允许模板中的任何参数?
【发布时间】:2017-12-09 18:41:12
【问题描述】:

模板的问题是您必须指定您想要的特定项目作为参数,例如typenametemplatevalue。但是,您不能说,根据下一个参数是否是这三个参数中的任何一个来专门化模板。

我在想,如果有一种方法可以根据这些参数进行专业化,如下例所示:

template <...Xs>
struct X;

template <template <typename...> class TT>
struct X<TT> {};

template <typename T>
struct X<T> {};

template <typename T, T I>
struct X<I> {};

这是一个带有未指定参数的参数包的模板,只能通过专门化访问。

这允许对模板专业化进行更多控制并接受任何参数列表。有谁知道是否有任何关于此类功能的讨论?

如果没有,提案流程是什么?

【问题讨论】:

  • 这基本上是模板重载。我希望我们将来有这样的东西。
  • @geza 不。那仍然是模板专业化。我试图用未指定参数的参数包指定模板。
  • 也许,不管我们如何称呼这个特性 :) 它就像函数重载。如果模板可以用可调用的(因此它是一种类型)或函数指针(因此它是一个值)来实例化,那将很有用。

标签: c++ c++20


【解决方案1】:

Universal Template Parameters 是为 2020 年 2 月的布拉格会议提交的。它引入了template auto X 作为任意模板实体的语法。 EWG-I 对此进行了讨论并收到了反馈。我相信作者会在下次瓦尔纳会议上把它带回来。

【讨论】:

    【解决方案2】:

    好吧,似乎还没有正式的提议,但有一个关于如何完成的建议here。它试图在裸上下文中重用关键字template 来定义一个模板参数,该参数将采用未指定的模板参数类型(UTPT)。

    在我知道here 之前,我已经写了另一个提案。它不使用关键字来指示模板参数类型 (TPT) 未指定。 它显示了一个并排比较,显示了一个模板的真实示例,该示例将从具有 UTPT 中受益,以及它在实施建议后的外观。

    我希望你会觉得这些有趣,如果是的话,请评论其中任何一个,以便他们得到更多的关注。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2014-09-28
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多