Tôi đã biết cách stdarg.h
để có hàm có đối số biến trong C++ như đã thảo luận here chẳng hạn. Tôi cũng biết tiêu chuẩn C++ 11 có các mẫu variadic như được giải thích here.Một hàm có số biến đối số với các kiểu đã biết, cách C++ 11
Nhưng trong cả hai đề án nói trên, chúng tôi không biết (và chúng tôi không thể ép buộc) loại đối số trong thời gian biên dịch afaik. Những gì tôi đang tìm kiếm là chuyển đối số biến của các loại đã biết thành một hàm. Tôi nghĩ rằng điều này có thể được thực hiện bởi vì tôi đọc về nó here:
variadic mẫu, mà cũng có thể được sử dụng để tạo ra các chức năng mà phải mất số biến của tham số, thường là lựa chọn tốt hơn bởi vì họ không áp đặt các hạn chế trên các loại đối số, không thực hiện các chương trình khuyến mãi tích phân và dấu phẩy động và được nhập an toàn.
Có thể không? Nếu có, làm thế nào tôi có thể làm điều này?
Tôi nghĩ đó là tất cả về sự hiểu lầm của tôi. Tôi biết cách thứ hai, nhưng tôi luôn nghĩ rằng không có kiểm soát về loại tham số. Đây không phải là sự thật. bởi vì hàm lấy tham số đầu tiên của một kiểu đã biết (chuỗi ở đây), nó buộc phải có các tham số của kiểu đó. Cảm ơn bạn. – melmi
Trước tiên, bạn có thể muốn di chuyển hộp mã thứ hai. Đó là một giải pháp rất tốt cho vấn đề, trong khi phiên bản 'initializer_list' thì không. Tôi sẽ đăng một điều lớn, phức tạp với SFINAE và như vậy, nhưng điều này là hợp lý hơn nhiều. –
@ nosid bạn thực sự có thể tránh sử dụng dấu ngoặc nhọn nếu bạn trộn cả std :: initializer_list và phương pháp tiếp cận mẫu variadic, bằng cách tạo một wrapper mẫu variadic xung quanh phiên bản std :: initializer_list, như sau: [xem trên coliru] (http: //coliru.stacked-crooked.com/a/4baef67192a0310c). –