前段時間,打印出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