Czy mogę użyć typu szablonu w jakikolwiek sposób jako argumentu gniazda lub sygnału? Jako przykład, próbuję zdefiniować następujące:Jak używać typów szablonów jako parametrów szczeliny i sygnału w wielu wątkach?
void exampleSignal(std::map<non_template_type_1,non_template_type_2> arg);
void exampleSlot(std::map<non_template_type_1,non_template_type_2> arg);
Powoduje to następujące podczas wykonywania:
QObject::connect: Cannot queue arguments of type
'std::map<non_template_type_1,non_template_type_2>'
(Make sure 'std::map<non_template_type_1,non_template_type_2>'
is registered using qRegisterMetaType().)
Starając się zarejestrować std::map<non_template_type_1,non_template_type_2>
z Q_DECLARE_METATYPE()
powoduje niepowodzenie kompilacji i najwyraźniej nie jest obsługiwany .
Jako obejście używam QVariantMap
zamiast std::map
. Ale naprawdę chciałbym poznać prawidłowy sposób rozwiązania tego problemu; tam, gdzie nie można modyfikować klas szablonów.
Edytuj: Zapomniałem wspomnieć, że sygnał i gniazdo są emitowane i odbierane w różnych wątkach. Najwyraźniej błąd środowiska wykonawczego nie występuje w scenariuszach z jednym wątkiem.
Faktycznie, potwierdziłem, że działa on bez 'Q_DECLARE_METATYPE' więc' qRegisterMetaType' wydaje się wystarczający wraz z 'typedef'. Nie wiem, jak bezpiecznie jest ominąć 'Q_DECLARE_METATYPE' chociaż. –