Tôi đang cố gắng viết một ứng dụng đang tải các phần mở rộng của nó một cách năng động trong suốt thời gian chạy. Tôi đã sử dụng thư viện Preprocessor Boost để viết một hàm tiền xử lý, đưa ra một danh sách các tên, khai báo một lớp cho mỗi tên (và làm cho tất cả các lớp con của một số lớp AbstractPlugin) và sau đó khai báo một trình tự Boost MPL chứa các lớp đó. Sau đó, tôi đã viết một lớp cố gắng trỏ đến AbstractPlugin nếu nó có thể được truyền tới bất kỳ kiểu nào trong chuỗi MPL đó. Vấn đề ở đây là chức năng tiền xử lý của tôi cần một danh sách đầy đủ tất cả các phần mở rộng mà tôi muốn tạo và tải. Có một số kỹ thuật cho phép tôi đăng ký từng phần mở rộng trong một tệp riêng biệt không?Đăng ký lớp C++ sao cho sau này một hàm có thể lặp qua tất cả các lớp đã đăng ký
Cập nhật:
Tôi tin rằng, giải thích của tôi về tình hình quá mơ hồ, vì vậy tôi quyết định làm cho nó cụ thể hơn.
Tôi muốn xác định tập hợp các loại tiện ích mở rộng. Đối với mỗi loại tiện ích, có thể có bất kỳ số lượng tiện ích mở rộng nào. Trong thời gian chạy chương trình tải thư viện bên ngoài, giải quyết các chức năng điểm nhập cảnh, gọi nó và, kết quả là, có được một con trỏ. Sau đó, nó cố gắng đưa con trỏ đó tới tất cả các kiểu mở rộng đã đăng ký (sử dụng dynamic_cast
, vì vậy các lớp cho các kiểu mở rộng đều được thừa kế từ một số lớp cơ sở đa hình). Nếu dàn diễn viên cho một số loại tiện ích mở rộng thành công, con trỏ được đúc sẽ được sử dụng trong một cuộc gọi đến trình xử lý đặc biệt cho loại tiện ích mở rộng đó.
Số loại tiện ích được biết tại thời gian biên dịch (trong khi, rõ ràng, số lượng tiện ích là vô hạn). Sử dụng aproach của tôi lớp bộ nạp sử dụng kiến thức này để kiểm tra xem có tồn tại một trình xử lý cho từng loại tiện ích (nếu không, chương trình không biên dịch). Ngoài ra, aproach của tôi không buộc các lớp học cho các loại mở rộng biết bất cứ điều gì về bộ nạp (vì vậy nó rất dễ dàng để sửa đổi bộ tải). Nhưng sẽ thuận tiện hơn nếu mỗi loại tiện ích mở rộng đăng ký chính nó.
Tạo tiêu đề có thể chấp nhận được không? – Arpegius