Załóżmy, że jest to funkcja, która przyjmuje kilka napisów:Konwersja zmiennej liczbie argumentów szablonu pakiet do std :: initializer_list
void fun (const std::initializer_list<std::string>& strings) {
for(auto s : strings)
// do something
}
Teraz mam o zmiennej liczbie argumentów template
funkcję powiedzieć foo()
jak:
template<typename ...Args>
void foo() {
fun(???);
}
ten Metoda nazywa się zewnętrznie jako:
foo<A, B, C, D>(); // where A, B, C, D are classes
A te classe s, które są przekazywane jako argumenty Oczekuje się, że zawierają wspólny static const
użytkownika:
static const std::string value = "...";
Oto moje pytania (jak je zdobyć):
- Kiedy wewnątrz
foo()
, sprawdź czy wszystkieArgs
zawieraćvalue
użyciustatic_assert
- Przekaż wszystkie takie wartości do
fun()
, aby utworzyćinitializer_list
; na przykładfun({A::value, B::value, ...});
Szukano kilka wątków związanych zmiennej liczbie argumentów szablonów i jego rozpakowaniu, ale nadal jestem nowicjuszem w tej dziedzinie. Wyjaśnienie trochę więcej szczegółów jest bardzo doceniane.
Oh Tak łatwo ... masz rację co do 'fun()' wykonania części; chciałem tylko uratować się od złych błędów kompilatora. :) – iammilind
Jak to jest sprawdzanie, czy wszystkie 'Args ...' ma element 'value'? – 0x499602D2
@ 0x499602D2 zanotuj rozszerzenie paczki wewnątrz wywołania do 'all()'. – ecatmur