I posted this on reddit and I feel like there may be a few users here that would also enjoy it. I modified this example to include spaces and newline characters, but you can adjust this to suit your needs.
// Template for printing
template<typename T>
void printT(T value) {
Serial.println(value);
}
template<typename T, typename... Args>
void printT(T firstValue, Args... args) {
Serial.print(firstValue);
Serial.print(" ");
printT(args...);
}
This template hack just calls "Serial.print" for each new argument of the printT function. That means you can say "printT(value1, value2, " ")" and so on. All you need to do is include the two templates in your program. The best part is that this just uses the native "Serial.print" command.
Here's an example: