2016-12-07 45 views
8

Chciałbym wystąpienia klasy jakC++ poszerzyć parametru pakiet do krotki tablic

template<typename ...Args> 
class X { 
private: 
    std::tuple<std::array<Arg0, 255>, std::array<Arg1, 255>, ...> m_tuples; // For Arg in Args 
} 

wiem, że to nie jest poprawna C++, ale w jaki sposób mogę osiągnąć efekt rozszerzania szablonu parametr paczka klasa do tablic przechowywanych wewnątrz krotki?

Odpowiedz

10
template<typename ...Args> 
class X { 
private: 
    std::tuple<std::array<Args, 255>...> m_tuples; // For Arg in Args 
}; 

... nie spodziewałam się tak blisko, prawda :)

+0

ja nie! Czy możesz wyjaśnić, jak działa to rozszerzenie? Utknąłem myśląc o tym, ponieważ rekursywnie wywoływałbym funkcje, wyskakując z pierwszego elementu zestawu parametrów. – shane

+0

@shane Reguły są dla mnie nieco niewyraźne, ale w ekspansji krótkiego pakietu działa się przez powielenie wzorca (syntaktycznego) i zastąpienie paczek argumentów w ramach tego wzorca. Tutaj wzorzec jest całym 'std :: array ', który zostaje rozszerzony do tego, co robisz, zastępując 'Args'. – Quentin

+2

@shane Zobacz http://stackoverflow.com/questions/17652412/what-are-the-rules-for-the-token-in-context-of-variadic-templates. –