名稱空間
變體
操作

std::indirect_result_t

來自 cppreference.com
 
 
迭代器庫
迭代器概念
迭代器原語
演算法概念與工具
間接可呼叫概念
常用演算法要求
(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 用於獲取對 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)
推導呼叫可呼叫物件與一組引數的結果型別
(類模板) [編輯]
透過投影計算indirectly_readable型別的值型別
(別名模板)[編輯]