Si supponga che non v'è una funzione che accetta più stringhe:Conversione Template Pack variadic in std :: initializer_list
void fun (const std::initializer_list<std::string>& strings) {
for(auto s : strings)
// do something
}
Ora, ho una funzione variadic template
dicono foo()
come:
template<typename ...Args>
void foo() {
fun(???);
}
Questo il metodo è chiamato esternamente come:
foo<A, B, C, D>(); // where A, B, C, D are classes
E questi classe s che sono passati come argomenti dovrebbero contenere un comune static const
membro:
static const std::string value = "...";
Ecco le mie domande (istruzioni):
- Quando all'interno
foo()
, controllare se tutte leArgs
contengonovalue
utilizzandostatic_assert
- Passare tutti questi valori a
fun()
per formare uninitializer_list
; per esempio.fun({A::value, B::value, ...});
Cercato diversi thread relativi ai modelli variadic e la sua estrazione, ma sono ancora novizio in questo settore. La spiegazione in piccoli dettagli è molto apprezzata.
Oh Così facile .. hai ragione su 'fun()' facendo la parte; volevo solo salvarmi dagli errori del compilatore. :) – iammilind
Come si verifica se tutti gli argomenti di "Args ..." hanno un membro 'value'? – 0x499602D2
@ 0x499602D2 nota l'espansione del pacchetto all'interno della chiamata a 'all()'. – ecatmur