Trong ứng dụng của tôi, tôi có hệ thống phân cấp lớp sau đây:Có thể trộn các lớp C++ có nguồn gốc từ mẫu với Q_OBJECT của Qt không?
class Word
{
...
}
template <typename T> class Dictionary
{
...
};
class WordDictionary : public Dictionary<Word>
{
Q_OBJECT
...
}
Lớp WordDictionary phân tích một cuốn từ điển mà phải mất một thời gian dài. Tôi đang chạy hàm phân tích cú pháp từ bên trong một chuỗi riêng biệt và tôi muốn nó có thể báo hiệu chuỗi GUI theo thời gian để cung cấp các cập nhật tiến trình dựa trên số dòng hiện tại đang được phân tích cú pháp. Đó là lý do tại sao tôi muốn nó là một Q_OBJECT. Tôi đã cố gắng để làm cho các lớp cơ sở từ điển một Q_OBJECT nhưng có một thông báo rằng Q_OBJECT mẫu không được hỗ trợ. Khi tôi gỡ bỏ vĩ mô, chỉ để lại WordDictionary như Q_OBJECT, tôi nhận được một loạt các thông báo lỗi có dạng tổng quát:
\ GeneratedFiles \ phát hành \ moc_dictionary.cpp (44):. Lỗi C2039: 'staticMetaObject': không phải là thành viên của 'từ điển'
với
[
T = Lời
]
có bất cứ điều gì tôi có thể làm để làm cho mẫu có nguồn gốc từ lớp WordDictionary tôi một Q_OBJECT khác hơn là thể xác định rõ chức năng template trong bên cạnh nó, sản xuất rất nhiều mã boilerplate?
chỉnh sửa: Thay đổi tờ khai mẫu để:
template <typename T> class Dictionary : public QObject
làm biên dịch mã. Tôi không chắc chắn nếu tôi không làm điều gì đó ngu ngốc và nếu điều này sẽ làm việc một cách chính xác, mặc dù.
[Tại sao Qt không sử dụng mẫu cho tín hiệu và vị trí] (http://qt-project.org/doc/qt-4.8/templates.html) –