gpt4 book ai didi

c++ - 如何在多线程中使用模板类型作为槽和信号参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:00 25 4
gpt4 key购买 nike

我可以以任何方式使用模板类型作为槽或信号参数吗?例如,我正在尝试定义以下内容:

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().)

正在尝试注册 std::map<non_template_type_1,non_template_type_2>Q_DECLARE_METATYPE()导致编译失败并且显然不受支持。

作为解决方法,我使用 QVariantMap而不是 std::map .但我真的很想知道解决这个问题的正确方法;一种无法修改模板类的地方。

编辑: 我忘了提到信号和槽是在不同的线程中发出和接收的。显然,运行时错误不会发生在单线程场景中。

最佳答案

这对我有用:

qRegisterMetaType< std::vector<float> >( "std::vector<float>" );
qRegisterMetaType< std::vector<int> >( "std::vector<int>" );
qRegisterMetaType< std::map<std::string,int64_t> >( "std::map<std::string,int64_t>" );

关于c++ - 如何在多线程中使用模板类型作为槽和信号参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com