变量函数:表达式包含未扩展的参数包' args'

时间:2014-04-12 11:00:30

标签: c++ templates c++11 variadic-functions

我想编写一个简单的日志函数,它接受任意数量的参数并将它们输出到控制台。用法示例:

LOG("hello");
LOG("hello", 1, 0.6);

我开始像这样实现它

template<typename... Args>
void LOG(Args... args) {
    va_list vargs;
    va_start(vargs, args);
    // for (auto arg: vargs) {}
}

但是编译器(clang ++)在标题中给出了错误

expression contains unexpanded parameter pack 'args'

有任何帮助吗?感谢

1 个答案:

答案 0 :(得分:5)

你可以试试这个:

void LOG() {
    cout << endl;
}
template<class T, class... OtherArgs> void LOG(T&& var, OtherArgs&&... args) {
    cout << std::forward<T>(var);
    LOG(std::forward<OtherArgs>(args)...);
}

这是一个基于此work的递归解决方案(也解释了here