5

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

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

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

"Functor" has not been declared

更改FunctorQtPrivate::Functor收益率:

QtPrivate::Functor is not a type

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

4

1 回答 1

11

有两种选择:

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)>
于 2013-02-05T08:37:46.643 回答