Sending LCD commands to a slave micro
Just inherit Print class and implement virtual size_t write(uint8_t); and you can use all kinds of print/println that Print implements. See Print Class @arduino.cc.

It implements these methods for you:

size_t print(const __FlashStringHelper *);
size_t print(const String &amp;);
size_t print(const char[]);
size_t print(char);
size_t print(unsigned char, int = DEC);
size_t print(int, int = DEC);
size_t print(unsigned int, int = DEC);
size_t print(long, int = DEC);
size_t print(unsigned long, int = DEC);
size_t print(double, int = 2);
size_t print(const Printable&amp;);

size_t println(const __FlashStringHelper *);
size_t println(const String &amp;s);
size_t println(const char[]);
size_t println(char);
size_t println(unsigned char, int = DEC);
size_t println(int, int = DEC);
size_t println(unsigned int, int = DEC);
size_t println(long, int = DEC);
size_t println(unsigned long, int = DEC);
size_t println(double, int = 2);
size_t println(const Printable&amp;);
size_t println(void);


However you have to implement 2D array print if you really need this, I don't see why do you need it but whatever (you can print each line separately). It just saves you time with implementing everything else.

And for std::ostream like approach I like this (works with anything inherited from Print class):

template &lt;class T&gt; inline Print &amp; operator&lt;&lt;(Print &amp; p, const T &amp; val) {
  p.print(val);
  return p;
}

// ...

void loop() {
  float variableA = 221.23;
  String variableB = "Some string";
  Serial &lt;&lt; F("flash string to save some ram: ") &lt;&lt; variableA &lt;&lt; F(" / ") &lt;&lt; variableB &lt;&lt; "\n";
}


Then you can implement some commands interface.