On Tuesday, 7 September 2021 at 04:13:08 UTC, Chris Piker wrote:
Any ideas on how to get the return type of `parseXML` below:
```
import dxml.parser;
const(char)[] _mmfile;
//_mmfile initialization
TYPE??? _entityRng = parseXML!(simpleXML)(_mmfile);
```
*before* calling parseXML, so that it can be a class member
variable?
Here's a quick script:
```d
#! /usr/bin/env dub
/++ dub.sdl:
dependency "dxml" version="0.4.0"
+/
import dxml.parser;
import std.stdio : writeln;
struct SomeXML {
EntityRange!(simpleXML, string) xml;
}
struct Again {
typeof(parseXML!simpleXML("")) xml;
}
void main() {
auto xml = parseXML!simpleXML("<x><y></y></x>");
pragma(msg, typeof(xml)); // compile time
writeln(typeid(xml)); // runtime
SomeXML some = SomeXML(xml);
foreach (_; 0 .. 4) {
writeln(some.xml.front);
some.xml.popFront;
}
auto again = Again(xml);
writeln(again.xml.front);
}
```
EntityRange have two template parameters, a Config with four
flags (where simpleXML has all flags set to yes) and the type of
the forward range supplying characters to be parsed. So,
`EntityRange!(simpleXML, string)` works as a type of those are
really what you'll be using, `typeof(parseXML!simpleXML(""))`
works as a type by seeing what type parseXML returns when invoked
like that.