【发布时间】:2015-11-10 00:17:13
【问题描述】:
我看到这篇帖子variadic template function to concatenate std::vector containers 建议使用以下语法:
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被每个元素依次替换。我叫它“虚拟数组逗号操作符hack”,不知道有没有正式名称:)
标签: c++ templates c++11 variadic-templates list-initialization