簡體   English   中英

用 || 折疊函數操作員

[英]Fold over a function with || operator

我試圖將一個函數應用於參數包中的每種類型,然后折疊結果。

示例: https : //godbolt.org/z/0YNon_

#include <cstdint>
#include <string>

template<typename T>
bool CheckCondition(std::uint64_t i){
    return i>sizeof(T);
}

template <typename... ToCheck>
bool AnyCheckCondition(std::uint64_t i){
    return CheckCondition<ToCheck>(i)||...;
}

int main() 
{
    return AnyCheckCondition<std::string,std::uint64_t, std::int64_t>(10);
}

不幸的是,折疊表達式無法編譯,我不確定為什么或如何修復它。

我收到以下錯誤

<source>: In function 'bool AnyCheckCondition(uint64_t)':

<source>:11:35: error: parameter packs not expanded with '...':

     return CheckCondition<ToCheck>(i) || ...;

            ~~~~~~~~~~~~~~~~~~~~~~~^~~

<source>:11:35: note:         'ToCheck'

<source>:11:38: error: expected ';' before '||' token

     return CheckCondition<ToCheck>(i) || ...;

                                      ^~~

                                      ;

<source>:11:39: error: expected primary-expression before '||' token

     return CheckCondition<ToCheck>(i) || ...;

                                       ^~

Compiler returned: 1

折疊表達式需要周圍的括號。

return (CheckCondition<ToCheck>(i) || ...);

折疊表達式具有以下形式

( pack op ... )
( ... op pack )
( pack op ... op init )
( init op ... op pack ) 

您缺少那些外括號。 將代碼更改為

return (CheckCondition<ToCheck>(i) || ...);

將得到它編譯。

暫無
暫無

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

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