invoke_result 具有成员 (operator[]) 功能

invoke_result with member (operator[]) function

如何为成员函数正确调用 invoke_result?或者专门针对运算符成员函数。我尝试 std::invoke_result<T::operator[], size_type> 没有成功。在这种情况下,正确的语法是什么?

下面呢?

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 的对象。

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

invoke_result 适用于有 invocable/callable 对象的情况。你没有,所以不要试图将方钉锤入圆孔。