Предположим, что существует функция, которая принимает несколько строк:
void fun (const std::initializer_list<std::string>& strings) {
for(auto s : strings)
// do something
}
Теперь у меня есть вариационная функция template
say foo()
как:
template<typename ...Args>
void foo () {
fun(???);
}
Этот метод называется внешним:
foo<A, B, C, D>(); // where A, B, C, D are classes
И эти классы, которые передаются как аргументы, как ожидается, содержат общий член static const
:
static const std::string value = "...";
Вот мои вопросы (как):
- Когда внутри
foo()
, проверьте, содержит ли всеArgs
value
, используяstatic_assert
- Передайте все такие значения в
fun()
, чтобы сформироватьinitializer_list
; напримерfun({A::value, B::value, ...});
Искал несколько тем, связанных с шаблонами variadic и его распаковкой, но я все еще новичок в этой области. Объяснение чуть более подробно оценивается.