Giả sử rằng có một chức năng mà chấp nhận một số chuỗi:Chuyển đổi variadic mẫu gói vào std :: initializer_list
void fun (const std::initializer_list<std::string>& strings) {
for(auto s : strings)
// do something
}
Bây giờ, tôi có một template
chức năng variadic nói foo()
như:
template<typename ...Args>
void foo() {
fun(???);
}
này phương pháp được gọi là bên ngoài là:
foo<A, B, C, D>(); // where A, B, C, D are classes
Và những classe này s mà được thông qua như các đối số được dự kiến sẽ chứa một chung static const
thành viên:
static const std::string value = "...";
Dưới đây là câu hỏi của tôi (cách):
- Khi bên
foo()
, kiểm tra xem tất cả cácArgs
chứavalue
sử dụngstatic_assert
- Chuyển tất cả các giá trị đó đến
fun()
để tạo thành mộtinitializer_list
; ví dụ.fun({A::value, B::value, ...});
Đã tìm kiếm một số chủ đề liên quan đến mẫu variadic và cách giải nén nhưng tôi vẫn là người mới trong lĩnh vực này. Giải thích chi tiết hơn một chút được nhiều người đánh giá cao.
Oh Vì vậy, dễ dàng .. bạn đang đúng về 'vui vẻ()' làm một phần; chỉ muốn lưu bản thân mình khỏi lỗi trình biên dịch xấu. :) – iammilind
Làm thế nào để kiểm tra này nếu tất cả 'Args ...' có một thành viên 'value'? – 0x499602D2
@ 0x499602D2 lưu ý việc mở rộng gói bên trong cuộc gọi đến 'all()'. – ecatmur