Tôi gặp sự cố khi thiết kế ứng dụng D. Có lẽ cách tiếp cận của tôi là hoàn toàn sai, vì vậy tôi đến đây để bạn giải cứu tôi. Bất kỳ đề xuất nào, bao gồm viết lại hoàn toàn, đều được chào đón.Xử lý D cấu trúc khuôn mẫu như một loại phổ biến
Tôi có một số loại templated:
enum Type : byte { Message='!', Integer='@' }
struct Token (T) {
Type type;
T value;
}
alias Token!string MessageToken;
alias Token!long IntegerToken;
Và tôi cần phải xử lý các loại tổng quát:
AnyToken genToken(bool cond) {
if (cond)
return MessageToken(Type.Message, "nighly builds");
else
return IntegerToken(Type.Integer, -42);
}
AnyToken a = genToken(true);
AnyToken b = genToken(false);
Làm thế nào để đạt được hiệu ứng này? Chỉnh sửa: Lựa chọn thay thế OOP cũng được hoan nghênh.
Làm cách nào để thêm các chức năng cho nó trông giống như thừa kế? Ít thi sẽ tốt hơn. Tôi thích cách bạn suy ra loại từ đối số, phù hợp tốt ở đây. –
bên trong hàm bạn có thể thực hiện lệnh 'final switch (type) {case Type.Integer: ... case Type.Message: ...}' trong hàm. Tôi có nghĩa rằng (hầu hết) những kiểm tra sẽ được tập trung bên trong định nghĩa của cấu trúc để khi bạn muốn thêm một loại bạn sẽ không phải săn tất cả xuống –
Cảm ơn, bây giờ tôi đang sử dụng 'final switch' cho nó. –