繁体   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