我正在尝试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
。什么样的语法可以克服这个问题?
答案 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));