meryngii.neta

今日も新たな"ネタ"を求めて。

.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が初期にあったら、ストリーム系の実装はこんな感じだったのかもしれない。