QQueue队列插入无参的函数

1.概要

std::function<void()是一个无参的构造函数的表示类型

// 创建一个 QQueue 来存储 std::function 对象  
    QQueue<std::function<void()>> functionQueue;  
  
    // 将 simpleFunction 添加到队列中  
    functionQueue.enqueue(simpleFunction);

2.内容

在 Qt 中,QQueue 是一个模板类,用于存储和管理一个先进先出的队列。如果你想要将无参的函数插入到 QQueue 中,你首先需要明确你想要存储的是函数指针、函数对象还是某种其他形式的可调用实体。

然而,直接将函数(无论是无参还是有参的)插入到 QQueue 中并不直接可行,因为 QQueue 是为了存储数据而设计的,而不是为了存储和执行代码。不过,你可以使用函数指针、std::function(如果你使用的是 C++11 或更高版本)或者 Qt 自己的信号和槽机制来实现类似的功能。

下面是一个使用 std::function 和 QQueue 的例子,其中 std::function 被用来存储无参的可调用对象:


#include <QQueue>  
#include <functional>  
#include <iostream>  
  
// 定义一个简单的函数,它不接受参数也不返回任何值  
void simpleFunction() {  
    std::cout << "Function executed!" << std::endl;  
}  
  
int main() {  
    // 创建一个 QQueue 来存储 std::function 对象  
    QQueue<std::function<void()>> functionQueue;  
  
    // 将 simpleFunction 添加到队列中  
    functionQueue.enqueue(simpleFunction);  
  
    // 从队列中取出并执行函数  
    while (!functionQueue.isEmpty()) {  
        auto func = functionQueue.dequeue();  
        func(); // 执行函数  
    }  
  
    return 0;  
}

在这个例子中,std::function<void()> 是一个可以存储任何无参、无返回值可调用对象的类型。我们将 simpleFunction 添加到 functionQueue 中,然后从队列中取出并执行它。

请注意,如果你正在使用 Qt 的信号和槽机制,并且想要在线程之间传递函数或任务,你可能需要考虑使用 Qt 的 QMetaObject::invokeMethodQtConcurrent 或者其他线程间通信机制,而不是直接将函数存储在 QQueue 中。这些机制提供了更安全、更灵活的方式来在不同线程之间执行代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值