gpt4 book ai didi

c++ - 我需要使用什么 Qt 类型来将 lambda 作为函数参数传递?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:32 28 4
gpt4 key购买 nike

现在 Qt5 支持将信号连接到 lambda 函数,我希望能够将 lambda 作为参数传递给另一个函数。我有一个看起来像这样的函数:

void SomeFunc(Functor f)
{
connect(obj, &MyObject::someSignal, f);
}

但是,当我这样做时编译器会报错:

"Functor" has not been declared

Functor 更改为 QtPrivate::Functor 会产生:

QtPrivate::Functor is not a type

基本上,我想做的就是将 QObject::connect 将进入我的函数的参数传递给函数。我需要使用什么类型?

最佳答案

有两种选择:

template<typename Functor>
void SomeFunc(Functor f)
{
connect(obj, &MyObject::someSignal, f);
}

void SomeFunc(std::function<void(/*ArgumentTypes...*/)> f)
{
connect(obj, &MyObject::someSignal, f);
}

第一个选项只是将任何参数转发给 connect,第二个选项使用 C++11 标准库中的多态函数指针。它的模板参数必须对应于信号的签名。 Qt 信号无效,/ArgumentTypes.../需要替换为函数的参数列表。所以如果信号声明为

void someSignal(int, QString);

函数将是

std::function<void(int, QString)>

关于c++ - 我需要使用什么 Qt 类型来将 lambda 作为函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703006/

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