既然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
将要进入我的函数的论点。我需要使用哪种类型?
答案 0 :(得分:8)
有两种选择:
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)>