[英]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.