before.cxx
#include <iostream>
#include <string>
class Console {
public:
void write(std::string msg) {
std::cout << msg;
}
};
int main(void) {
Console console;
console.write("hello");
console.write(", ");
console.write("world!");
console.write("\n");
return 0;
}
after.cxx
#include <iostream>
#include <string>
class _Console {
public:
virtual void write(std::string msg) = 0;
};
class Console: public _Console {
public:
void write(std::string msg) {
std::cout << msg;
}
};
class ConsoleProxy: public _Console {
public:
~ConsoleProxy(void) {
this->console.write(this->cache);
}
void write(std::string msg) {
this->cache += msg;
}
private:
Console console;
std::string cache;
};
int main(void) {
ConsoleProxy consoleProxy;
consoleProxy.write("hello");
consoleProxy.write(", ");
consoleProxy.write("world!");
consoleProxy.write("\n");
return 0;
}