std :: invoke и указатель сложной функции на член класса - PullRequest
0 голосов
/ 24 января 2019

Я экспериментирую с std::invoke. Я считаю довольно простым использование указателя на функцию-член класса, объект и любые аргументы. Я пытаюсь понять, как использовать следующее с std::invoke

    QTextEdit* textEdit ....
    int sz = textEdit->text().size();

следующее не работает

    int sz = std::invoke(&QTextEdit::text::size, textEdit);
    // Error : text is not a class, namespace or enumeration

Мне нужно получить доступ int QString::size(), поскольку QTextEdit::text возвращает QString. Какой синтаксис может решить эту проблему?

1 Ответ

0 голосов
/ 25 января 2019

Похоже, вы вызываете функцию для возвращенного значения метода text(). Это означает, что ваша область не будет работать, так как size() не является частью вашего класса, а скорее методом возвращаемого типа. Например, если тип возвращаемого значения std::string, вы должны сделать следующее:

// Calling "size()" on the returned value
int sz = std::invoke(&QTextEdit::text, textEdit).size();
// Calling "text" and "size" via "std::invoke"
int sz = std::invoke(&std::string::size, std::invoke(&QTextEdit::text, textEdit));
...