Có, static_cast
là OK trong trường hợp đó và điều phù hợp để sử dụng.
Tôi phải hỏi tại sao bạn không lưu trữ classA*
con trỏ ở vị trí đầu tiên. Nếu bạn muốn đặt con trỏ lớp có nguồn gốc vào nó, sau đó hãy cẩn thận, bạn cần phải upcast/upconvert (ngầm hoặc rõ ràng) các con trỏ lớp dẫn xuất đến classA*
trước bạn đặt chúng vào bản đồ. Tuy nhiên, ngay cả khi bạn đặt con trỏ lớp dẫn xuất vào bản đồ, một con trỏ lớp cơ sở sẽ đủ bởi vì một con trỏ lớp dẫn xuất được chuyển đổi hoàn toàn thành một con trỏ lớp cơ sở.
Lý do void * được sử dụng là vì giữ là thành viên của lớp xác định trên tiêu đề được một số tệp cpp sử dụng không biết classA là gì.
Đó có thể là lý do hợp lệ để ngăn chặn vi phạm phân lớp.
Tôi sẽ phải bao gồm tiêu đề của định nghĩa classA trên các tệp cpp này mà không thể thực hiện được bằng nhiều lý do.
Điều đó có thể không nhất thiết trong trường hợp của bạn. Một tờ khai chuyển tiếp đủ. Nếu tiêu đề biết những gì được đưa vào bản đồ, nhưng chỉ muốn tránh bao gồm các tiêu đề bổ sung, đây là cách để đi.
Nguồn
2012-08-25 09:53:56
Tại sao bạn làm điều này? Vui lòng cung cấp thêm ngữ cảnh vì có khả năng là một giải pháp phù hợp hơn. – Johnsyweb
Tại sao bạn không sử dụng bản đồ ngay từ đầu? –
BatchyX
@BatchyX Tôi đoán 'giữ' không chỉ chứa classA *? –