带有成员(操作员[])功能的Indoke_Result

invoke_result with member (operator[]) function

本文关键字:功能 Indoke Result 成员 操作员      更新时间:2023-10-16

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

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

invoke_result适用于当您具有可不可行/可呼叫的对象时。您没有一个,所以不要试图将方形钉在圆孔中。

如下何处?

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

但是该语法应与单个,而不是模板一起使用operator[]

在模板或过载的情况下,您应该避免使用std::invoke_result并遵循T.C建议的decltype()

建议

或者,也许您可以将呼叫包装在lambda函数中,然后将std::invoke_result应用于lambda(如果您真的想使用std::invoke_result(。

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

因此,在您的示例中,第一个T参数代表调用其操作员的类型T的对象。