.NETのConsoleもどき
Variadic Templatesの練習のためにSystem.Consoleもどきを。
#include <iostream> #include <complex> struct Console { template <typename T, typename... Types> static void Write(T&& arg, Types... args) { std::cout << arg; Write(args...); } template <typename... Types> static void WriteLine(Types... args) { Write(args...); std::cout << std::endl; } private: static void Write() { } }; int main() { Console::Write('x', "abc", std::hex, 123); Console::WriteLine(12.34, std::complex<double>(1.0, 2.0)); }
これでタイプセーフなのが面白い。Variadic Templatesが初期にあったら、ストリーム系の実装はこんな感じだったのかもしれない。