Как создать делегат функцию в QT - PullRequest
1 голос
/ 09 июля 2019

В C # мы объявляем функцию делегата класса следующим образом:

public delegate void MyClassDelegate(float num);

И затем мы можем использовать его для других функций, таких как:

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

Как мне сделать это или что-то подобное на QT?

1 Ответ

0 голосов
/ 09 июля 2019

Это не связано с 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...