如何在QT中创建委托函数

时间:2019-07-09 06:38:56

标签: c++ delegates

在C#中,我们声明此类的委托函数:

public delegate void MyClassDelegate(float num);

然后我们可以将其用于其他功能,例如:

public int SomeFunction(float num, MyClass.MyClassDelegate del);
  

如何在QT上执行此操作?

1 个答案:

答案 0 :(得分:0)

它与Qt无关。为此,请使用std::function

void caller(int value, std::function<float(int)> delegate)
{
    qDebug() << delegate(value);
}

float divide(int value)
{
    return float(value) / 3;
}

int main(int argc, char *argv[])
{

    caller(7, divide);
    return 0;
}

如果您需要详细说明(例如存储状态以创建代理功能等),还可以将对象与()运算符一起使用:

struct MyDelegate
{
    float operator()(int value) { return float(value) / 3; }
};

float divide(int value)
{
    return float(value) / 3;
}

void caller(int value, MyDelegate& delegate)
{
    qDebug() << delegate(value);
}

int main(int argc, char *argv[])
{

    MyDelegate delegate;
    caller(7, delegate);
    return 0;
}