std::indirect_result_t
来自cppreference.com
<tbody>
</tbody>
| 在标头 <iterator> 定义
|
||
template< class F, class... Is > requires (std::indirectly_readable<Is> && ...) && std::invocable<F, std::iter_reference_t<Is>...> using indirect_result_t = std::invoke_result_t<F, std::iter_reference_t<Is>...>; |
(C++20 起) | |
别名模板 indirect_result_t 获得在解引用 indirectly_readable 类型 Is... 的结果上调用 invocable 类型 F 的结果类型。
模板形参
| F | - | 可调用类型 |
| Is | - | 解引用到实参的间接可读类型 |
示例
运行此代码
#include <iterator>
#include <type_traits>
struct Fn
{
long operator()(const int&);
int operator()(int&&);
short operator()(int, int) const;
auto operator()(const float) -> int&;
void operator()(int[8]);
};
static_assert(
std::is_same_v<std::indirect_result_t<Fn, const int*>, long> and
std::is_same_v<std::indirect_result_t<Fn, std::move_iterator<int*>>, int> and
std::is_same_v<std::indirect_result_t<const Fn, int*, int*>, short> and
std::is_same_v<std::indirect_result_t<Fn, float*>, int&> and
std::is_same_v<std::indirect_result_t<Fn, int**>, void>
);
int main() {}
参阅
(C++11)(C++20 移除)(C++17) |
推导以一组实参调用一个可调用对象的结果类型 (类模板) |
(C++26) |
计算 indirectly_readable 类型投影后的值类型 (别名模板) |