Tôi đang thiết kế API cho thư viện C++ sẽ được phân phối trong một đối tượng dll/shared. Thư viện chứa các lớp polymorhic với các chức năng ảo. Tôi lo ngại rằng nếu tôi phơi bày các hàm ảo này trên API DLL, tôi tự cắt bỏ khả năng mở rộng cùng một lớp với nhiều chức năng ảo hơn mà không làm hỏng khả năng tương thích nhị phân với các ứng dụng được xây dựng cho phiên bản trước của thư viện.Cách thiết kế API C++ cho khả năng mở rộng tương thích nhị phân
Một tùy chọn sẽ là sử dụng thành ngữ PImpl để ẩn tất cả các lớp có chức năng ảo, nhưng điều đó dường như có những hạn chế: ứng dụng này mất khả năng phân lớp các lớp thư viện và ghi đè các phương thức ảo.
Làm thế nào bạn thiết kế một lớp API có thể được phân lớp trong ứng dụng mà không mất khả năng mở rộng API với các phương thức ảo (không trừu tượng) trong phiên bản mới của dll trong khi vẫn tương thích nhị phân ngược?
Cập nhật: nền tảng đích cho thư viện là windows/msvc và linux/gcc.
Máy chủ lưu trữ tệp PDF bạn đã đăng dường như đã hoàn tất. Bạn có thể đăng lại không? –
@ MichałGórny có vẻ như nó đã hoạt động trở lại, nhưng tôi đã lưu trữ lại nó [ở đây] (http://static.coldattic.info/restricted/science/syrcose09/cppbincomp.pdf) chỉ trong trường hợp. –