Tôi có một chương trình trong C++ với các plugin (libs động). Trong chương trình chính, tôi muốn thực hiện một hàm tĩnh để kiểm tra xem tôi có thể tạo một đối tượng thuộc loại này hay không.Buộc thực hiện lại chức năng tĩnh trong các lớp kế thừa
Một ví dụ mà không libs động (không neccesary để hiểu được vấn đề):
#include "libs/parent.h"
#include "libs/one.h"
#include "libs/two.h"
int main(int argc, char * argv[])
{
Parent* obj;
if (One::match(argv[1]))
obj = new One();
else if (Two::match(argv[1]))
obj = new Two();
}
Bây giờ, tôi có một lớp giao diện có tên phụ huynh. Tất cả các plugin được kế thừa từ lớp này. Lý tưởng nhất, tôi có một hàm tĩnh ảo trong Parent match, và tất cả các plugin cần phải reimplement chức năng này.
Sự cố với mã này là tôi không thể thực hiện chức năng ảo tĩnh trong C++, vì vậy tôi không biết cách giải quyết vấn đề.
Xin lỗi vì mi tiếng anh, tôi đã cố gắng hết
Nếu hàm 'match()' là tĩnh, bạn sẽ không gọi nó là 'One :: match()'? Tại sao nó phải tĩnh? –
Xin lỗi, tôi đã sửa lỗi Nó phải tĩnh vì tôi cần gọi nó trước khi tạo đối tượng – pacopepe222
Không phải lo lắng, tôi nghĩ sử dụng một phương pháp ảo thuần túy sẽ làm việc cho bạn, nhưng đó không phải là tĩnh. Vì vậy, có lẽ câu trả lời của người khác có thể giúp bạn nhiều hơn. –