命名空间
变体
操作

std::indirect_result_t

来自 cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器基元
算法概念和实用程序
间接可调用概念
通用算法要求
(C++20)
(C++20)
(C++20)
实用程序
indirect_result_t
(C++20)
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
定义在头文件 <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 获取对 invocable 类型 F 进行解引用 indirectly_readable 类型 Is... 的结果进行调用后的结果类型。

[编辑] 模板参数

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)
推导出使用一组参数调用可调用对象的结果类型
(类模板) [编辑]
计算通过投影获得的 indirectly_readable 类型的值类型
(别名模板)[编辑]