使用std :: ostream打印参数包最简单的
方法是用逗号分隔?
例:
template<typename... Args>
void doPrint(std::ostream& out,Args... args){
out << args...; // WRONG! What to write here?
}
// Usage:
int main(){
doPrint(std::cout,34,"bla",15); // Should print: 34,bla,15
}
注意:
可以假设相应的过载为<运算符可用于所有类型的参数包.
另外一种替代方案,不需要递归
调用和逗号:
template <typename Arg,typename... Args>
void doPrint(std::ostream& out,Arg&& arg,Args&&... args)
{
out << std::forward<Arg>(arg);
using expander = int[];
(void)expander{0,(void(out << ',' << std::forward<Args>(args)),0)...};
}
DEMO