【问题标题】:Is there any regular pattern to figure out where to put ... in templates?是否有任何常规模式可以找出在模板中放置 ... 的位置?
【发布时间】:2020-11-09 10:27:36
【问题描述】:

我对使用模板参数包时应该放置... 的位置感到困惑。

例如,在模板参数列表中,我们应该使用typename ...Ts,而在参数列表中,它变成Ts...ts

当实例化一个模板时,它变成tuple<Ts...>,最让我困惑的是std::forward<Args>(args)...... 在括号外面。在那之前,我强迫自己只记住这一点,直到今天我看到这个:sizeof...(Params),我想我必须了解正则模式,以免进一步混淆。

那么任何人都可以帮助如何对待... 以完全了解放置它的位置吗?

【问题讨论】:

  • this 有帮助吗?
  • @yaodav 我认为该网站没有解释为什么... 在每种情况下都放在哪里。

标签: c++ templates parameter-pack


【解决方案1】:

它跟随事物被重复。后面的名字就像多个名字一样。

template<typename... Ts> 中,我们声明了多个typenames,例如template<typename Ts0, typename Ts1, typename Ts2>.

void foo(Ts... ts) 中,我们声明了多个参数,使用多种类型,例如void foo(Ts0 ts0, Ts1 ts1, Ts2 ts2)

std::tuple<Ts...> 中,我们使用多种类型来实例化std::tuple,例如std::tuple<Ts0, Ts1, Ts2>

std::forward<Args>(args)... 中,我们使用了多个表达式,例如std::forward<Args0>(args0), std::forward<Args1>(args1), std::forward<Args2>(args2)

sizeof... 是一个命名运算符,不同于sizeof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2012-02-19
    相关资源
    最近更新 更多