![](/img/trans.png)
[英]Bug in C++20 concepts with template member functions and 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.