On 12/21/2016 07:59 PM, Jon Degenhardt wrote:

> construct the 'opts' parameter from
> definitions stored in two or more files. The reason for doing this is to
> create a customization mechanism where-by there are a number of default
> capabilities built-in to the main code base, but someone can customize
> their copy of the code, putting definitions in a separate file, and have
> it added in at compile time, including modifying command line arguments.

I'm not sure this is any better than your mixin solution but getopt can be called multiple times on the same arguments. So, for example common code can parse them for its arguments and special code can parse them for its arguments. Useful bits:

* std.getopt.config.passThrough allows unrecognized arguments

* Although main's args can be passed to any function, program arguments are also available through Runtime.args()

The following program calls getopt twice.

import core.runtime : Runtime;
import std.getopt;

void foo() {
    int special;
// Making a copy as Runtime.args() seems to return rvalue and getopt takes by-ref
    auto progArgs = Runtime.args();
    getopt(progArgs, std.getopt.config.passThrough, "special", &special);
}

void main(string[] args) {
    int length;
    getopt(args, std.getopt.config.passThrough, "length", &length);
}

Ali

Reply via email to