Tôi đang triển khai chương trình C++ có thể lập trình nhanh đối tượng cho một tệp đầu vào cung cấp tên và đối số lớp để truyền cho các hàm tạo.C++ Mẫu Nhà máy với Cấu trúc Constructor Constraint
Các lớp học có nguồn gốc từ một lớp cơ sở chung nhưng chữ ký hàm tạo của chúng khác nhau.
Họ được khai báo như sau:
class Base { ... }
class Class1 : Base { Class1(int a1, int a2); }
class Class2 : Base { Class2(int a1, int a2, int a3); }
... and so on...
Các loại đối số không phải là int, trong thực tế, họ có thể là bất kỳ built-in loại hay phức tạp, kiểu tùy chỉnh.
Chương trình đầu vào có thể trông như thế này ở dạng JSON:
[
{ "Class1": ["arg11", "arg12"] },
{ "Class2": ["arg21", "arg22", "arg23"] },
...and so on...
]
Đọc qua tài liệu cho Boost.Functional/Factory có vẻ như nó có thể giải quyết vấn đề của tôi là nó không có thực tế rằng trong ứng dụng của tôi chữ ký constructor khác nhau (sự ràng buộc không đồng nhất). Boost.Function/Cách tiếp cận của nhà máy là bình thường hóa các chữ ký của hàm tạo tuy nhiên điều này là không thể trong ứng dụng của tôi.
Trong ngôn ngữ động như Python, điều này sẽ khá tầm thường: obj = klass(*args)
trong đó klass = Class1
và args = ["arg11, "arg12"]
.
Vậy làm cách nào để thực hiện mô hình nhà máy với ràng buộc không đồng nhất trong C++?
Có thư viện nào khác ngoài Boost mà tôi đã bỏ qua có thể hỗ trợ không?
Có thể thực hiện điều này sao cho phụ thuộc duy nhất là thư viện chuẩn (tức là không có tăng cường)?
Hơn nữa, trong trường hợp đối số hàm tạo là kiểu phức tạp để nó phải được xây dựng đặc biệt từ biểu diễn JSON của nó, nó ảnh hưởng như thế nào đến độ phức tạp của vấn đề?
Để tham khảo trong tương lai, trái ngược với đồng nhất là không đồng nhất –
Hey Seth, 'không đồng nhất' cũng là một từ hợp lệ theo từ điển Merriam-Webster và cũng tương tự như trong ý nghĩa cho 'đồng nhất'. Tôi đã chọn tên cũ vì đó cũng là lựa chọn của tài liệu Boost.Function/Factory (xem liên kết trong bài đăng của tôi). –
Có, tôi biết, bạn có thể thêm "in" hoặc "un" vào hầu hết các từ và nó vẫn sẽ là một từ. Nghe có vẻ kì lạ. –