簡體   English   中英

如何使用std :: invoke_result_t獲取函數的返回類型

[英]How to use std::invoke_result_t to get return type of a function

我正在嘗試實現風味的for_each() ,當傳入的函數返回false時,它將停止迭代。 如果傳入的函數未返回布爾值, std::for_each()

我在獲取返回的函數參數類型時遇到一些困難,我嘗試使用std::invoke_result_t ,但是它抱怨:

在'std :: __ 1 :: invoke_result <...中沒有名為'type'的成員

在C ++參考上的示例中 ,它始終為函數傳遞Arg類型。 但是就我而言,類型F是否應該已經不包含整個函數的所有類型信息?

template<class C, class F>
void for_each(C container, F&& f)
{
    for (auto const& v : container)
    {
        if constexpr (std::is_same_v<std::invoke_result_t<F>, bool>)
        {
            if (not std::forward<F>(f)(v))
                break;
        }
        else
        {
            std::forward<F>(f)(v);
        }
    }
}

關於“如何使其工作”問題的第一部分的答案是包括參數類型-在這種情況下,可能類似於std::invoke_result_t<F, decltype(v)>

至於“類型F是否應該已經包含整個函數的所有類型信息?” -正如另一位評論者所述, F可能是一個具有多個operator()重載的函數對象,因此答案是否定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM