Đây là câu hỏi về cách triển khai một số nhu cầu tôi đã có gần đây. Tôi chắc chắn có một mô hình hoặc giải pháp phổ biến cho điều này và, mặc dù tôi đã đi kèm với một, tôi mong muốn tìm hiểu thêm.Phương pháp C++ trong các lớp dẫn xuất với các tham số khác nhau
Giả sử tôi đang làm việc trong một trò chơi mà tất cả các thực thể liên quan đến bản thân trò chơi đều bắt nguồn từ lớp "Diễn viên" (nói "chướng ngại vật", "chướng ngại vật", "đạn" và "pháo"). Trong trò chơi, tất cả các thực thể đó được lưu trữ trong một véc tơ std::vector<Actor *>
để chúng có thể được duyệt qua.
Bây giờ, giả sử mỗi "diễn viên" có thể "làm" một cái gì đó ở mỗi lượt và chúng ta hãy cung cấp cho họ một phương pháp "hành động". Chướng ngại vật :: hành động sẽ làm ít, Moving_obstacle :: hành động và đạn :: hành động sẽ di chuyển chúng xung quanh và "Cannon :: hành động" sẽ tạo ra một viên đạn mới. Nó có ý nghĩa để có một chức năng ảo thuần túy Actor :: hành động vì vậy tôi có thể lần lượt làm một cái gì đó như:
std::vector<Actor *>::iterator b=myvectorofactors.begin(), e=myvectorofactors.end();
while(b < e)
{
*b->act();
b++;
}
Và có tất cả "hành động". Vâng, cho đến nay rất tốt ... Điều này, Cannon :: hành động có thể có một nguyên mẫu khác nhau hoặc giá trị trả lại (ví dụ, để lưu trữ một projectile và leter tạo ra nó đã đẩy vào vector) và sự khác biệt "nhỏ" này phá vỡ tất cả.
Bây giờ, tôi biết rằng từ quan điểm nhất định, các quá tải phương thức này là các chức năng hoàn toàn khác nhau. Tôi cũng biết rằng người ta luôn có thể lập kế hoạch trước và kỹ sư thông qua vấn đề với đủ tầm nhìn xa ... Hoặc người ta chỉ có thể xoay quanh vấn đề.
Trong trường hợp này, tôi chỉ sử dụng các trình nhận dạng duy nhất khác nhau cho mỗi lớp Actor có nguồn gốc và sử dụng chúng để đúc lớp phóng viên và thực hiện công việc xung quanh chúng. Tôi chắc chắn tôi sẽ gặp lại vấn đề tương tự và tôi tò mò muốn biết về một số giải pháp cấp nhập cảnh.
Cảm ơn trước về thời gian của bạn.
ít bức tường của văn bản, nhiều ví dụ mã, xin vui lòng – David
có thể không đồng ý @ Dave, đó là một cái giếng nghĩ ra câu hỏi. – Nick
Bạn có thể muốn xem [Mẫu khách truy cập] (http://en.wikipedia.org/wiki/Visitor_pattern). – Nick