On Monday, 4 August 2014 at 22:09:49 UTC, anonymous wrote:
On Monday, 4 August 2014 at 22:00:18 UTC, splatterdash wrote:
```
File f = File("input_file")
// detect gzip ...
if (isGzip)
{
auto fileIter = new MyFileReader!GzipIterator(f)
}
else
{
auto fileIter = new MyFileReader!NormalIterator(f)
}
foreach(string line; fileIter) {
// do things
}
```
(Added braces for clarity.)
However I always get the compiler error `undefined identifier
lineIter`.
You have two independent variables called fileIter. Both are
only
available in their respective scopes. Declare the variable
before
the `if` to get one variable with a wider scope:
SomeCommonBaseTypeOfThoseMyFileReaderVariants fileIter;
if (isGzip)
fileIter = new MyFileReader!GzipIterator(f);
else
fileIter = new MyFileReader!NormalIterator(f);
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?