...ing logging 4.0

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

enumに対するforeach

import std.stdio;
import std.typecons;
import std.typetuple;

alias TypeTuple!(
	"Read",
	"Write",
	"Append"
) FileOpenModeDefinition;

mixin(defineEnum!("FileOpenMode", FileOpenModeDefinition));

void main()
{
	foreach (string element; FileOpenModeDefinition)
	{
		FileOpenMode mode;
		enumFromString(element, mode);
		final switch (mode)
		{
			case FileOpenMode.Read:
				writeln("読み込みモード");
				break;
			case FileOpenMode.Write:
				writeln("書き込みモード");
				break;
			case FileOpenMode.Append:
				writeln("追記モード");
		}
	}
}

__traitsを使ったやり方もあるみたい.