Tôi hiện đang cố gắng thu hút đầu của mình xung quanh một số điều tôi có thể làm với hỗ trợ mẫu variadic. Giả sử tôi có một chức năng như thế này -C++ Mẫu Chức năng biến thể của loại đã biết
template <typename ... Args>
void foo(Args ... a)
{
int len = sizeof...(tail);
int vals[] = {a...};
/* Rest of function */
}
/* Elsewhere */
foo(1, 2, 3, 4);
Mã này hoạt động vì tôi cho rằng đối số sẽ là số nguyên, nhưng rõ ràng sẽ thất bại nếu tôi cung cấp cái gì khác. Nếu tôi biết rằng các gói thông số sẽ chứa một loại hình cụ thể trước, có một số cách mà tôi có thể làm mà không có khuôn mẫu và có một cái gì đó giống như -
void foo(int ... a)
Tôi đã cố gắng làm điều này, nhưng trình biên dịch đưa ra một lỗi về foo là trường trống. Tôi biết rằng tôi cũng có thể truy cập các tham số trong gói thông qua đệ quy, nhưng tôi không chắc chắn điều này sẽ khắc phục được sự cố mà tôi có - cụ thể là tôi muốn có thể lấy một số biến đối số cùng loại.
Bạn có thể sử dụng 'enable_if' để đảm bảo tất cả các loại * là * ints. –
Mã hoạt động nếu bạn đi sâu vào một nhóm int. Nó không hoạt động nếu bạn cho nó cái gì khác. Có vẻ như nhiệm vụ đã hoàn thành. Vấn đề ở đâu? –
Tôi đoán vấn đề là liệu có thể đảm bảo rằng chúng là ints tại thời gian biên dịch hay không. – znby