Вместо устаревшего модуля std.stream
используйте диапазоны.
import std.stdio;
import std.range;
import std.algorithm;
import std.typecons;
import std.conv;
// Log levels
enum LEVEL {
DEBUG,
INFO,
WARN
};
alias LogMsg = Tuple!(LEVEL, string); // Should be a struct, but I'm lazy
void main() {
// Get a writer, which is an OutputRange
auto writer = stderr.lockingTextWriter();
// Some messages. Can be any InputRange, not just an array
auto messages = [
LogMsg(LEVEL.DEBUG, "Log message 1"),
LogMsg(LEVEL.INFO, "Log message 2"),
LogMsg(LEVEL.WARN, "Log message 3"),
];
// Write each message to the writer
put(writer, messages
// transform LogMsg's into strings to write.
// Bonus points: use chain instead of ~ to avoid allocation
.map!(msg => msg[0].to!string ~ ": " ~ msg[1] ~ "\n")
);
}
Обратите внимание: std.stream устарел. –
@ColonelThirtyTwo Да, я видел, что тыкал еще немного. Черт позор, большая стандартная библиотека без потоков. Когда мы собираемся получить Tango для D2? –
Используйте диапазоны вместо. Они похожи на потоки, но обобщены на большее, чем просто байты. См. Мой ответ. –