lig*_*ulb 2 c++ operators member-functions c++17 invoke-result
如何为成员函数正确调用 invoke_result?或者专门用于操作员成员函数。我试过std::invoke_result<T::operator[], size_type>没有成功。在这种情况下,正确的语法是什么?
如下呢?
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
别。使用decltype(std::declval<T&>()[size_type{}])或类似的东西(根据需要调整值类别和 cv 限定)。
invoke_result用于当您有一个可调用/可调用对象时。你没有,所以不要试图把方钉锤成圆孔。
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |