【问题标题】:what does this ... (three dots) means in c++这...(三个点)在 C++ 中是什么意思
【发布时间】:2017-02-09 02:02:15
【问题描述】:

这似乎是一个愚蠢的问题,但是当我尝试在 SOF 中查看这个答案时,

Compile time generated tables

我注意到这样的陈述:

template<
    typename IntType, std::size_t Cols, 
    IntType(*Step)(IntType),IntType Start, std::size_t ...Rs
> 
constexpr auto make_integer_matrix(std::index_sequence<Rs...>)
{
    return std::array<std::array<IntType,Cols>,sizeof...(Rs)> 
        {{make_integer_array<IntType,Step,Start + (Rs * Cols),Cols>()...}};
}

更具体地说:

std::size_t ...Rs

std::index_sequence<Rs...>

……在这里是什么意思?

编辑 1

报告为与该问题相关的原始问题的问题不正确:

该问题无法回答这两种情况(因为它们不是具有可变数量参数的函数)

std::size_t ...Rs
std::index_sequence<Rs...>

但这是一个很好的解释:

https://xenakios.wordpress.com/2014/01/16/c11-the-three-dots-that-is-variadic-templates-part/

【问题讨论】:

标签: c++


【解决方案1】:

它称为参数包,引用零个或多个模板参数:

http://en.cppreference.com/w/cpp/language/parameter_pack

std::size_t ...Rs

std::size_t类型的参数包。 该类型的变量(例如Rs... my_var)可以使用以下命令解包:

my_var... 

此模式大量用于转发(未知)数量的参数:

template < typename... T >
Derived( T&&... args ) : Base( std::forward< T >( args )... )
{
}

【讨论】:

  • 但是为什么我们需要“转发(未知)数量的参数”?
  • @Henry 例如获取命令行参数。此外,printf 使用它。
猜你喜欢
  • 2017-04-28
  • 2011-09-14
  • 2021-04-22
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2021-11-19
  • 2011-02-09
相关资源
最近更新 更多