簡體   English   中英

將variadic模板類型轉換為void,預期')'之前

[英]Cast variadic template type to void, expected ')' before

在我的代碼中,我使用variadic模板函數作為日志記錄機制。 如果定義了DEBUG宏,則打印一條消息; 如果沒有定義DEBUG ,那么它應該什么都不打印。

我的代碼:

#ifdef DEBUG
    inline void LOG_CHAT(){ }

    template<typename First, typename ...Rest>
    void LOG_CHAT(First && first, Rest && ...rest){
        std::cout << std::forward<First>(first);
        LOG_CHAT(std::forward<Rest>(rest)...);
    }

#else

    template<typename ...Rest>
    void LOG_CHAT(Rest && ...rest){ 
        (void)(rest...);
    }

#endif

我會把函數定義留空,但我不想得到“未使用的參數”編譯器警告。 因此,參數(s)被轉換為void以消除編譯器警告。 但是,施放會導致下面再現的另一個錯誤。

錯誤:預期')'在'休息'之前'UNUSED(... rest);

注意:在宏'UNUSED'的定義中#define UNUSED(x)(void)(x)

因此,我的主要目標是通過轉換為void或使用任何其他方法來消除編譯器警告。 但如果我能夠把它變為void我會更高興。

您可以在沒有參數名稱的LOG_CHAT下發布LOG_CHAT ,這將禁止警告。

void LOG_CHAT(Rest && ...)

暫無
暫無

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

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