前段时间,打印出std :: tuple的解决方案发布为here。大多数情况下,我会得到所发生的事情。尽管我很难理解print_tuple函数中发生了什么。漂亮的打印元组解析
template<class Ch, class Tr, class Tuple, std::size_t... Is>
void print_tuple(std::basic_ostream<Ch,Tr>& os, Tuple const& t, seq<Is...>){
using swallow = int[];
(void)swallow{0, (void(os << (Is == 0? "" : ", ") << std::get<Is>(t)), 0)...};
}
我不明白这个函数体内发生了什么。据我所知,这与解包Is
有关。我得知,条件Is == 0
正在检查以查看我们是否处于头部元素。
那么这是怎么回事?
该代码从初始值设定项列表中构造(然后抛出)一个int []数组,其中每个元素为0,但打印元组的一个元素作为副作用(通过逗号运算符)。初始化程序列表的使用只是为了进入包扩展工作的上下文。 – 2014-12-02 15:20:41
啊!所以'swallow {...}'构造是int []的初始化列表。乍看之下我没有明白。 – sguzman 2014-12-02 17:14:33