将variadic模板类型转换为void,预期')'之前

ene*_*ski 4 c++ casting void variadic-templates c++11

在我的代码中,我使用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
Run Code Online (Sandbox Code Playgroud)

我会把函数定义留空,但我不想得到"未使用的参数"编译器警告.因此,参数(s)被转换为void以消除编译器警告.但是,施放会导致下面再现的另一个错误.

错误:预期')'在'休息'之前'UNUSED(... rest);

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

因此,我的主要目标是通过强制转换void或使用任何其他方法来消除编译器警告.但如果我能把它投入,我会更高兴void.

Dan*_*ani 8

您可以在LOG_CHAT没有参数名称的情况下发布,这将禁止警告.

void LOG_CHAT(Rest && ...)
Run Code Online (Sandbox Code Playgroud)