现在 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/