...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

Rangeって何でこんなに楽しいのでしょうか

std::ostream_iterator的なものを.

import std.stdio;
import std.algorithm;
//import std.range;

struct TerminatorAdapter(Range, String)// if (isOutputRange!(Range, char)) // charだけじゃないんだけど...
{
	Range r;
	String s;
	this(Range r, String s)
	{
		this.r = r;
		this.s = s;
	}
	void put(T)(T t)
	{
		r.put(t);
		r.put(s);
	}
}

TerminatorAdapter!(Range,String) terminatorAdapter(Range,String)(Range r, String s)
{
	return TerminatorAdapter!(Range,String)(r,s);
}

void main()
{
	copy(stdin.byLine(), terminatorAdapter(stdout.lockingTextWriter(), "[end of line]\n"));
}

確かにStreamと同じように扱える.