Andrei Alexandrescu đã có một bài nói chuyện tuyệt vời mang tên: Variadic Templates are Funadic.Mẫu biến thể - các loại mở rộng khác nhau
Ông trình bày 3 mở rộng sau đó là subltey khác nhau:
template <class... Ts> void fun(Ts... vs) {
gun(A<Ts...>::hun(vs)...);
gun(A<Ts...>::hun(vs...));
gun(A<Ts>::hun(vs)...);
}
Ông giải thích:
Gọi 1: Mở rộng tất cả Ts
cho instatiation của class A
, Sau đó gọi hun(vs)
Sau đó mở rộng tất cả các thông số một lần nữa khi chuyển chúng vào gun
Gọi 2: Mở rộng tất cả Ts
và tất cả vs
riêng
Gọi 3: Expnads trong bước khóa, ví dụ: Mở rộng tranh luận 1 trong tổng số Ts
và Đối số 1 của vs
Mở rộng tranh luận 2 Ts
và đối số 2 của vs
Mở rộng đối n của Ts
và lập luận n của vs
thảo luận khác về templ variadic ates chỉ dường như bao gồm các mẫu lớp đơn giản của variadic và các hàm variadic như typesafe printf, v.v. Tôi không chắc chắn về cách các kiểu mở rộng khác nhau này có hiệu lực như thế nào và mỗi loại sẽ hữu ích ở đâu.
Có ai có một số ví dụ minh họa ứng dụng của từng loại mở rộng không?
bản sao có thể có của [Mở rộng gói mẫu biến thể] (http://stackoverflow.com/questions/9182251/variadic-templates-pack-expansions) – kennytm
@KennyTM không trùng lặp. Anh chàng này muốn ví dụ về từng loại mở rộng (không nhất thiết chỉ là ba kiểu mà alexandrescu đã cho thấy, và những gì anh ta chỉ cho thấy hai kiểu mở rộng (một trong một danh sách đối số mẫu và một trong danh sách đối số hàm)). –
... nhưng khi ông chấp nhận câu trả lời chỉ cho thấy hai loại mở rộng này, tôi đoán câu hỏi là không chính xác hoặc tôi thiếu hiểu biết về các câu hỏi hoặc cả hai ... –