[英]C++: How can one get return type of a class member function using 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.