क्या मैं किसी स्लॉट या सिग्नल तर्क के रूप में किसी भी प्रकार का टेम्पलेट प्रकार उपयोग कर सकता हूं?एकाधिक धागे में स्लॉट और सिग्नल पैरामीटर के रूप में टेम्पलेट प्रकारों का उपयोग कैसे करें?
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);
इस क्रम के दौरान निम्नलिखित में परिणाम है: उदाहरण के लिए, मैं निम्नलिखित परिभाषित करने के लिए कोशिश कर रहा हूँ
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().)
साथ Q_DECLARE_METATYPE()
परिणाम संकलन विफलता में std::map<non_template_type_1,non_template_type_2>
रजिस्टर करने के लिए कोशिश कर रहा है और जाहिरा तौर पर समर्थित नहीं है ।
एक कामकाज के रूप में, मैं std::map
के बजाय QVariantMap
का उपयोग कर रहा हूं। लेकिन मैं वास्तव में इस समस्या को हल करने का सही तरीका जानना चाहता हूं; एक जहां टेम्पलेट कक्षाओं को संशोधित करना संभव नहीं है।
संपादित करें: मैं यह उल्लेख करना भूल गया कि सिग्नल और स्लॉट उत्सर्जित और विभिन्न धागे में प्राप्त हुए हैं। जाहिर है रनटाइम त्रुटि सिंगल-थ्रेड परिदृश्य में नहीं होती है।
असल में, मैंने इसे 'Q_DECLARE_METATYPE' के बिना काम करने की पुष्टि की, इसलिए' qRegisterMetaType' 'typedef' के साथ पर्याप्त प्रतीत होता है। मुझे नहीं पता कि 'Q_DECLARE_METATYPE' को छोड़ना कितना सुरक्षित है। –