invoke_result 与成员 (operator[]) 函数

lig*_*ulb 2 c++ operators member-functions c++17 invoke-result

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

max*_*x66 5

如下呢?

std::invoke_result<decltype(&T::operator[]), T, size_type>
Run Code Online (Sandbox Code Playgroud)

但此语法应该适用于单个而不是模板operator[]

如果出现模板或过载的情况,您应该避免std::invoke_result并遵循decltype()TC建议的方式

或者,也许您可​​以将调用包装在 lambda 函数中并应用于std::invoke_resultlambda(如果您真的非常想使用std::invoke_result)。

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

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


T.C*_*.C. 5

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

invoke_result用于当您有一个可调用/可调用对象时。你没有,所以不要试图把方钉锤成圆孔。