簡體   English   中英

我應該何時以及如何使用 std::predicate

[英]When and how should I use std::predicate

我試圖約束 Callable 在評估時返回布爾值。 我一直在嘗試使用概念std::predicate ,但它似乎沒有做我想做的事。

所以我定義了自己的概念,即可調用並返回可轉換為布爾值的東西。 但同樣,我很難理解我能用它做什么或不能做什么,我想知道std::predicate的實際用例是什么?

#include<concepts>
#include<string>

template<class F, class... Args>
concept Predicate = std::invocable<F, Args...> &&
                    std::convertible_to<std::invoke_result_t<F, Args...>, bool>;

int main(int argc, char *argv[])
{ 
 constexpr Predicate auto f1 = [](){return true;}; // ok
 constexpr std::predicate auto f2 = [](){return true;}; // ok
 constexpr int x = 34;
 constexpr Predicate auto f3 = [x](){ return x==42;}; // ok

 // Pas ok:  error: deduced initializer does not satisfy placeholder constraints
 //constexpr Predicate auto f4 = [](auto x){ return x==42;}; 
 //constexpr std::predicate auto f5 = [](auto x){ return x==42;};
}

你不能有一個接受“可以調用的東西”的函數。 它必須是“可以用一組已知(在聲明時)類型的參數調用的東西”。 這就是為什么std::predicate除了潛在的可調用類型之外還需要一組參數的原因。

您的第一個示例有效,因為您沒有為謂詞概念提供任何參數,並且您的函數也沒有采用任何參數。 所以空參數列表匹配空參數列表。

暫無
暫無

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

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