2012-02-29 39 views

Trả lời

7

nếu bạn sử dụng các mẫu có

void foo(A...)(A a){ 
    bar(a); 
} 

void bar(B...)(B b){ 
//... 
} 

các a được mở rộng mà thời gian biên dịch những gì lập luận nó được gọi với

bạn cũng có thể cắt [] ra một số tranh cãi, hoặc bạn có thêm một cuộc tranh cãi để danh sách

+0

Đó là một mẹo hay mà tôi không biết. Thật không may, trong trường hợp của tôi, tôi không thể sử dụng các mẫu vì tôi cần ghi đè hàm đó trong một lớp con. Có lẽ tôi sẽ thay đổi thiết kế. –

+1

@SantiagoV. Trong D, các hàm variadic dựa trên các mẫu. Tôi sẽ đi xa như nói rằng C phong cách chức năng variadic không thể tồn tại tự nhiên trong một ngôn ngữ gõ mạnh mẽ. Bạn luôn có thể quấn các tham số của bạn trong một bộ sưu tập không đồng nhất của một số loại, nhưng bạn sẽ phải đưa ra quyết định như thế nào để xử lý các đối số còn thiếu. Ngoài ra, hãy xem std.tuple để thực hiện thư viện chuẩn của D (vẫn sử dụng các mẫu). – Tim

1

Tôi nghĩ rằng core.vararg có thể được sử dụng.

+0

Không, tôi đã kiểm tra tại thời điểm viết câu hỏi này. core.vararg chỉ cung cấp giao diện giống như C cho varargs. –

Các vấn đề liên quan