gpt4 book ai didi

c++ - 将函数指针插入 QMap (Qt)

转载 作者:行者123 更新时间:2023-11-30 04:23:29 28 4
gpt4 key购买 nike

我正在为 Qt 中的 REST API 创建某种路由器,但在将函数指针插入 QMap 时遇到了问题。

我有课IModule其他模块是从中派生出来的。IModule.h的重要线路是

typedef QByteArray* (*IBusAction)(IBus * , ProxyRequest *);

class IModule : public QObject
{
Q_OBJECT

protected:
QMap<QString , IBusAction > *m_actions;

然后我有UserModule源自 IModule.cpp文件我有这些行:

QByteArray* UserModule::create(IBus *bus, ProxyRequest *req)
{
}

QByteArray* UserModule::show( IBus *bus, ProxyRequest *req)
{
}


UserModule::UserModule(QObject *parent) :
IModule(parent)
{

// register functions
m_actions->insert("show", &UserModule::show);
m_actions->insert("create", UserModule::create);

}

所以我尝试了两个选项,如何在没有引用符号的情况下将函数放入 QMap 中,但两者都不起作用。我收到错误:no matching function for call to 'QMap<QString, QByteArray* (*)(IBus*, ProxyRequest*)>::insert(const char [5], QByteArray* (UserModule::*)(IBus*, ProxyRequest*))'

我花了几个小时解决这个问题,尝试了很多不同的方法来解决它,但都没有成功。

因此,我将很高兴收到任何建议。

最佳答案

您的 IBusAction 是指向函数的指针类型。这与指向成员函数的指针不兼容。

当你调用一个成员函数(比如你的 UserModule::create 函数)时,它需要一个额外的(“不可见的”)参数:函数被调用的实例(this 指针)。

你基本上有三个选择:

  • IBusAction 更改为指向UserModule 成员函数的指针。不过,您只能使用该类的功能。

    typedef QByteArray* (UserModule::*IBusAction)(IBus * , ProxyRequest *);
  • 将函数设为静态(这会改变代码的语义)

  • 使用独立函数(顶级函数,不是类的成员)而不是成员函数。

关于c++ - 将函数指针插入 QMap (Qt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13330806/

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