2016-09-30 2 views
8

Es kann eine dumme Frage scheint, aber wenn ich versuche, in SOF auf diese Antwort zu suchen,was das bedeutet ... (drei Punkte) bedeutet in C++

Compile time generated tables

ich Aussagen wie dies bemerkt :

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>()...}}; 
} 

genauer gesagt:

std::size_t ...Rs 

oder

std::index_sequence<Rs...> 

was bedeutet ... bedeutet hier?

Edit 1

Die Frage, wie die ursprüngliche Frage auf diese Frage im Zusammenhang berichtet ist nicht korrekt:

Diese Frage nicht diese beiden Fälle beantworten kann (da sie nicht Funktionen mit variablen Anzahl von Argumenten sind)

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

Aber das ist eine gute Erklärung:

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

+0

https: Eine Variable dieses Typs (zB Rs... my_var) mit entpackt werden //xenakios.wordpress .com/2014/01/16/c11-the-drei-dots-das-ist-variadic-templates-part/ –

+0

Sie spezifizieren [Variadic Argumente] (http://en.cppreference.com/w/cpp/language/variadic_arguments), siehe den doppelten Link für ihre Verwendung. – CoryKramer

+0

@CoryKramer: Danke, aber sie nicht, wie zum Beispiel std :: size_t ... Rs ist keine Funktion mit variabler Anzahl von Argumenten, es ist eine Vorlage mit variabler Anzahl von Argumenten wie im Blog erklärt. – mans

Antwort

5

Sein genannt einen Parametersatz und bezieht sich auf Null oder mehrere Template-Parameter:

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

std::size_t ...Rs 

der Parameter Packung des Typs std::size_t ist.

my_var... 

Dieses Muster verwendet wird, stark in Weiterleiten einer (unbekannt) Anzahl der Argumente:

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