簡體   English   中英

C++20 std::invocable 語法

[英]C++20 std::invocable syntax

我想寫這個

    template <typename F, typename... Args> requires std::invocable<F&, Args...>
    void applyFunction(F&& f, Args&&... args) {

    }

沒有requires子句,所以我想要類似的東西

template <std::invocable<F, Args...>>
    void applyFunction(F&& f, Args&&... args) {

    }

...但它無法編譯。 我搜索了 StackOverflow,但找不到如何使用正確的語法。 如何正確使用簡潔的語法?

更新:我發現這有效:

    template <typename... Args, std::invocable<Args...> F>
    void applyFunction(F&& f, Args&&... args) {

    }

還是丑。 有更好的辦法嗎?

在模板參數列表中使用概念代替typename僅在您替換概念的模板參數之一時才有效。 具體來說,第一個。

如果您有兩個(或更多)共享關系的模板參數,那么您很可能需要一個requires子句。 你需要與它和平相處。 實際上,像您在模板參數列表中所做的那樣,將參數包放在 function 前面會產生后果。 用戶在調用 function 時幾乎不可能直接指定可調用類型參數,因此用戶將被迫依賴模板參數推導。

不要試圖強迫語法工作,因為它需要更少的擊鍵來鍵入。 以對你正在做的事情最有意義的方式寫作,這使得它最清楚正在發生的事情。

暫無
暫無

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

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