传递函数指针代替插槽函数

Passing function pointer in place of slot function

本文关键字:插槽 函数 指针 传递函数      更新时间:2023-10-16

在尝试做这样的事情时:

connect(process1, SIGNAL(waitForReadyRead()), this, SLOT(dataReceived_1()));

我有太多的信号处理过程。我已经创建了一个包含所有这些进程(对象(的 QList。

为了简化代码,我想把这个连接放在一个循环中,并通过遍历 processList 来执行这个信号槽连接。

像这样:

for(int i=0; i<procList.length(); ++i){
   connect(procList[i], SIGNAL(waitForReadyRead()), this, SLOT(data_rcvd[i]));
}

这里data_rcvd是一个包含插槽函数的QList~但不幸的是,我们无法在 QList 中添加函数。所以我想知道,是否有可能定义函数指针来完成这个任务???

或者你认为,我创建了一个新的 QProcess 类(extend(并重载函数 waitForReadyRead(( 来发出一个包含此特定信息的指针?

列表可能不包含函数,但可能包含函数指针。所以声明一个函数指针列表。在表达式中,函数指示符隐式转换为指向函数类型的指针。指针是对象。

这是一个使用标准容器std::list的演示程序。

#include <iostream>
#include <list>
long long sum( int x, int y ) { return ( long long )x + y; }
long long multiply( int x, int y ) { return ( long long )x * y; }
int main()
{
    std::list<long long( * )( int, int )> lst = { sum, multiply };
    for ( const auto &p : lst ) std::cout << p( 10, 2 ) << 'n';
}

它的输出是

12
20