将可变参数模板类型转换为空值,应在

时间:2018-08-15 13:42:36

标签: c++ c++11 casting variadic-templates void

在我的代码中,我将 可变模板函数 用于日志记录机制。如果定义了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

我会将函数定义保留为空,但是我不想得到“未使用的参数” 编译器警告。因此,将参数强制转换为void以摆脱编译器警告。但是,强制转换会引起另一个错误,该错误在下面再现。

  

错误:在未使用的UNUSED(... rest)之前出现预期的')';

     

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

因此,我的主要目标是通过强制转换为void或使用任何其他方法来摆脱编译器警告。但是,如果能够将其转换为void,我会更开心。

1 个答案:

答案 0 :(得分:8)

您可以使用不带参数名称的LOG_CHAT进行发布,这将禁止警告。

void LOG_CHAT(Rest && ...)