在我的代码中,我将 可变模板函数 用于日志记录机制。如果定义了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
,我会更开心。
答案 0 :(得分:8)
您可以使用不带参数名称的LOG_CHAT
进行发布,这将禁止警告。
void LOG_CHAT(Rest && ...)