繁体   English   中英

带成员(operator [])函数的invoke_result

[英]invoke_result with member (operator[]) function

如何为成员函数正确调用invoke_result? 或专门用于操作员成员功能。 我尝试了std::invoke_result<T::operator[], size_type>失败。 在这种情况下正确的语法是什么?

别。 使用decltype(std::declval<T&>()[size_type{}])或类似的东西(根据需要调整值类别和cv限定)。

invoke_result用于具有可调用/可调用对象的对象。 您没有一个,所以不要试图将方钉锤成圆孔。

如下呢?

std::invoke_result<decltype(&T::operator[]), T, size_type>

但是此语法应与单个(而不是模板) operator[]

如果是模板或重载,则应避免std::invoke_result并遵循TC建议的decltype()方法

或者,也许可以将调用包装在lambda函数中,然后将std::invoke_result应用于lambda(如果您确实非常想使用std::invoke_result )。

关于std::invoke_result语法,请注意,指向成员函数的指针与指向常规函数的指针完全不同。 无论如何,您可以粗略地将其视为指向常规函数的指针,该函数接收与调用其方法的对象相对应的附加参数(在第一个位置)。

因此,在您的示例中,第一个T参数表示调用其运算符的T类型的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM