Declaring run time variables
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Aug 4 15:45:15 PDT 2014
On Monday, 4 August 2014 at 22:18:24 UTC, splatterdash wrote:
> Indeed I do. I'm not sure which type I should use for the
> common base type, though. MyFileReader is a templated class, so
> using it plainly did not work. I also tried `InputRange!string`
> to no avail despite `MyFileReader` implementing the three
> InputRange requirement (popFront(), front, and empty).
>
> Any ideas on what I should as the class?
Let MyFileReader implement an interface that has the operations
you need. That interface can be std.range.InputRange!string, or
you can define your own.
Note that a type is an input range when it has the input range
primitives (front, popFront, empty), but it's only a
std.range.InputRange!T when it implements the interface in the
OOP sense: class C : InputRange!E {...}.
Phobos generally doesn't use InputRange, but templatizes
everything. You can go that way, too, and move the foreach loop
to a templated function:
void main()
{
File f = File("input_file")
// detect gzip ...
if (isGzip)
doThings(new MyFileReader!GzipIterator(f));
else
doThings(new MyFileReader!NormalIterator(f));
}
void doThings(I)(I fileIter)
{
foreach(string line; fileIter) {
// do things
}
}
More information about the Digitalmars-d-learn
mailing list