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

Nat*_*man 5 c++ lambda c++11 qt5

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

void SomeFunc(Functor f)
{
    connect(obj, &MyObject::someSignal, f);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,编译器会抱怨:

"Functor" has not been declared
Run Code Online (Sandbox Code Playgroud)

更改FunctorQtPrivate::Functor收益率:

QtPrivate::Functor is not a type
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*dec 9

有两种选择:

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

要么

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

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

void someSignal(int, QString);
Run Code Online (Sandbox Code Playgroud)

功能将是

std::function<void(int, QString)>
Run Code Online (Sandbox Code Playgroud)