std :: invoke和指向类成员的复杂函数指针

时间:2019-01-24 19:58:00

标签: c++ qt qt5 member-function-pointers

我正在尝试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 :(得分:0)

似乎您正在对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));