я наткнулся на этот пост variadic template function to concatenate std::vector containers предполагая использование следующего синтаксиса:int a [] {(functioncall (a1, a2), 0) ...}; (Недействительный (а)); Что означает этот синтаксис?
template<typename T>
void append_to_vector(std::vector<T>& v1, const std::vector<T>& v2) {
std::cout << v2[0] << std::endl;
for (auto& e : v2) v1.push_back(e);
}
template<typename T, typename... A>
std::vector<T> concat_version3(std::vector<T> v1, const A&... vr) {
int unpack[] { (append_to_vector(v1, vr), 1)... };
(void(unpack));
return v1;
}
Я начал играть с ним, чтобы понять, как это работает, так как я не видел этого:
int unpack[] { (append_to_vector(v1, vr), 0)... };
(void(unpack));
Похоже, это какой-то динамически сгенерированный список инициализации, который также имеет побочные эффекты? Меня также озадачивает тот факт, что 0
выше не имеет значения. Я заменил -1 и 5, и каждый из этих значений работал очень хорошо.
Так может кто-то сказать мне название этой техники/синтаксиса и что именно происходит в двух строках выше? Я бы очень признателен за любые указания и извиниться, если я пропустил соответствующие сообщения SO.
Этот метод позволяет использовать функцию 'append_to_vector (v1, X)' один раз для каждого из приведенных вариационных аргументов, при этом каждый элемент заменяется на 'X'. Я называю это «фиктивным массивом», не знаю, имеет ли оно официальное название :) –