Как использовать InputRange! (Dchar) со Stdin в D 2.0? - PullRequest
4 голосов
/ 07 июня 2011

Я пытаюсь написать универсальный код, который может преобразовать поток любого символа (dchar s) в любое место ... будь то файл или stdin, в другой файл или stdout.

Как мне это сделать?

Кажется, что stdin и stdout болезненны для использования с InputRange и OutputRange (так как мне приходится каждый раз оборачивать их вручную), и я не могу использовать std.stdio.Stream потому что он дает мне байты, а не строки ... и я не могу найти какой-либо адаптер для простого преобразования из одного в другой.

Так эффективно, Я не могу найти хороший способ использовать stdin / stdout в своих программах .

Есть ли что-нибудь, например как .NET TextReader, который может абстрактно читать текст как InputRange!dchar независимо от того, является ли его ввод строкой, консолью или файлом?

1 Ответ

2 голосов
/ 08 июня 2011

Правильная функция, которая принимает входной диапазон dchar:

void func(Range)(Range input)
    if(isInputRange!Range && is(ElementType!Range == dchar))
{}

Однако у вас должен быть входной диапазон, который получает ввод от stdin.Говорят о необходимости переделки stdio / streaming, что еще не было сделано.Существует недокументированный диапазон из dchar для стандартного ввода.

...