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)
更改Functor到QtPrivate::Functor收益率:
QtPrivate::Functor is not a type
Run Code Online (Sandbox Code Playgroud)
基本上,我想要做的就是传递QObject::connect将要进入我的函数的参数.我需要使用什么类型的?
有两种选择:
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)