bearophile wrote:
switch (arg) {
    case("-s") {
        try {
          next_arg = iargs.next();
          size = toInt(args[idx++]);
        } catch (...) {
            throw new Exception("...");
        }
    }
    case("-m") {
        printMessages = true;
    }
    case("-p") // just 1 istruction, no {} needed
        printResults = true;
    case("-h"); // semicolon isn't allowed here
        showUsage();
    default { // default case may need some care
        throw new Exception("...");
    }
}

You can do something like this:

void main(string[] args) {
    auto t = ["-s"[]: { writefln("handle argument -s"); },
              "-m": { writefln("handle argument -m"); }];
    if (auto pcode = args[1] in t) {
        (*pcode)();
    } else {
        //default case
    }
}

Even the ugly and unneeded case labels are gone!

If you don't mind your ulta-modern switch-case to allocate memory when it's used.

If you still don't like it, you can do some ugly mixin() and CTFE stuff. Nobody will mind because that's modern D style.

Reply via email to