I fear that the template construct makes a copy of the class for each used size.
Not necessarily. I have seen the template arguments turn into instance members, with one copy of code. I don't recall if I looked at NeoBufferedPrint, but I think the compiler probably will do that. That class adds the "flush when full" concept to a fixed-size buffer.
I need to add a base class, really, that does what you have offered. Then NeoBufferedPrint can "derive" from that class.
You might want to look at pyro_65's PrintEx library. Much more complete.