gpt4 book ai didi

c++ - 如何获取非静态成员函数的地址以在 QtConcurrent 中使用?

转载 作者:行者123 更新时间:2023-11-28 02:47:08 30 4
gpt4 key购买 nike

我试图在另一个线程中运行非静态成员函数。如果我去:

void *(PortManager::*innerAskPtr)() = &this->innerAsk;
QFuture<void> f = QtConcurrent::run(innerAskPtr);

提示

ISO C++ forbids taking the adress of an unqualified or parenthesized non-static member function to form a pointer to member function.

但是如果我删除这个额外的引用符号:

void *(PortManager::*innerAskPtr)() = this->innerAsk;
QFuture<void> f = QtConcurrent::run(innerAskPtr);

就这样吧

cannot convert 'PortManager::innerAsk' from type 'void (PortManager::)()' to type 'void* (PortManager::*)()`

要在右侧添加什么才能在左侧获得这些额外的星号 (*)?

但是,即使我能到达那里,总会有另一个错误;关于运行(T(*)()):

no matching function for call to 'run(void* (PortManager::*&)())

我很难理解这个引用是如何到达那里的......

最佳答案

documentation for QtConcurrent::run似乎可以解释这一切。

Using Member Functions

QtConcurrent::run() also accepts pointers to member functions. The first argument must be either a const reference or a pointer to an instance of the class. Passing by const reference is useful when calling const member functions; passing by pointer is useful for calling non-const member functions that modify the instance.

此文本后紧接有代码示例。

在您的代码中:

void *(PortManager::*innerAskPtr)() = this->innerAsk;
QFuture<void> f = QtConcurrent::run(innerAskPtr);

错误消息表明 this->innerAsk 返回 void,但您试图将其分配给返回 void 的指向成员函数的指针*。你的意思可能是:

void (PortManager::*innerAskPtr)() = &PortManager::innerAsk;

但您不需要为了调用QtConcurrent::run而执行此操作,因为代码示例显示您只需编写:

QtConcurrent::run( this, &PortManager::innerAsk );

关于c++ - 如何获取非静态成员函数的地址以在 QtConcurrent 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028129/

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