我实际上遇到了以下问题:我希望能够使用 -Wall -Wextra -Werror
进行构建,但是,以下代码会提示未使用的参数:
struct foo
{
template <typename... Args>
static void bar()
{ }
template <typename T, typename ... Args>
static void bar(T&& value, Args&& ... args)
{
#ifdef DEBUG
std::cout << value;
bar(std::forward<Args>(args)...);
#endif
}
};
第一个未使用的参数很容易修复:
#ifdef DEBUG
std::cout << value;
bar(std::forward<Args>(args)...);
#else // Shut the compiler up
(void) value;
#endif
我的问题是,如何使用剩余的 args
执行此操作?都没有
(void)(args...);
也不是
(void)(args)...;
会工作,两者都提示参数包没有被扩展。
(这是在 GCC 4.7.3 下,如果这对潜在的解决方案有任何影响的话)。
最佳答案
使用可变参数模板时,使用 sink 更干净:
struct sink { template<typename ...Args> sink(Args const & ... ) {} };
#ifdef DEBUG
std::cout << value;
bar(std::forward<Args>(args)...);
#else
sink { value, args ... }; //eat all unused arguments!
#endif
关于c++ - 将可变参数包转换为 (void),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532475/