Một lúc trước, một giải pháp để in ra std :: tuple đã được đăng here. Đối với hầu hết các phần tôi nhận được những gì đang xảy ra. Tôi đang gặp khó khăn khi hiểu những gì đang diễn ra trong hàm print_tuple.Anatomy of pretty 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)...};
}
Tôi không hiểu điều gì đang xảy ra trong phần nội dung của hàm này. Theo như tôi có thể nói, nó có liên quan đến việc giải nén Is
. Tôi nhận được điều kiện đó, Is == 0
đang kiểm tra xem chúng tôi có ở phần tử đầu hay không.
Vậy điều gì đang xảy ra?
Cấu trúc mã (và sau đó ném đi) một mảng 'int []' từ một danh sách khởi tạo, trong đó mỗi phần tử là 0 nhưng in một phần tử của tuple như là một tác dụng phụ (qua toán tử dấu phẩy). Việc sử dụng danh sách initializer chỉ là để đi vào một bối cảnh mở rộng gói sẽ hoạt động. –
Ah! Vì vậy, cấu trúc 'swallow {...}' là một danh sách khởi tạo cho int []. Tôi không hiểu điều đó ngay từ cái nhìn đầu tiên. – sguzman