带分隔符的可变参数模板打印实现

Nor*_*her 0 c++ templates

我正在尝试使用可变参数模板做一个简单的 PoC。现在,我的代码如下:

#include <iostream>
#include <string>
using namespace std;
template <typename T>
void println(const T& head) {
    cout << head << endl;
}

template <typename T, typename ... Args>
void println(const T& head, Args&& ... args) {
    cout << head << ", ";
    println(args...);
}

int main() {
    println(1,2,3,4,5,6);
}
Run Code Online (Sandbox Code Playgroud)

这里,分隔符是, ,但我希望由用户提供,并且也有一个默认值。然而,void println(const T& head, const Args&... args, const string& sep = ",")由于参数包的原因,尝试类似的方法是行不通的。有什么解决方法可以以简单的方式做到这一点吗?

max*_*x66 5

我提出以下非递归版本。基于模板默认值分隔符

#include <iostream>

template <char Sep = ',', typename T, typename ... Args>
void println (T const & head, Args const & ... args)
 { ((std::cout << head), ..., (std::cout << Sep << ' ' << args)) << std::endl; }

int main()
 {
   println(1,2,3,4,5,6);
   println<':'>(1,2,3,4,5,6);
 }
Run Code Online (Sandbox Code Playgroud)

打印

1, 2, 3, 4, 5, 6
1: 2: 3: 4: 5: 6
Run Code Online (Sandbox Code Playgroud)