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.
您可以在LOG_CHAT没有参数名称的情况下发布,这将禁止警告.
void LOG_CHAT(Rest && ...)
Run Code Online (Sandbox Code Playgroud)