class templates and static if

Tyler Jameson Little beatgammit at gmail.com
Sun Feb 26 15:23:55 PST 2012


So, here's my code, as it stands currently:

import std.stdio;

static enum Type {
request,
 response
};

class Parser(Type t) {
static if (t == Type.request) {
 string name = "request";
} else {
string name = "response";
 }

string message;

this(string message) {
 this.message = message;
}
}

void main() {
 immutable Type t = Type.request;
Parser!t h = new Parser!t("Hello world");

writefln("%s: %s", h.name, h.message);
}

The general goal is to make a templated class that will only include the
parts that each needs. I would like to keep this all as one class template,
because there is a lot of shared code, and I would like to keep it as
seamless as possible and not have to separate out code into separate
functions.

Anyway, my current approach is a little clunky, because it requires an
immutable to be created just to tell the compiler what type of parser I
need.

I was thinking about having two classes, Request and Response, and have
parser take a normal template (class Parser (T)), but I wanted to restrict
it to just those two classes (for now), so I came up with the enum solution.

Is there a better way to do this?

What I'd ultimately like to do is have some static if surrounding blocks of
code that depends on the input to the template.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20120226/205980bb/attachment.html>


More information about the Digitalmars-d-learn mailing list