Alias template param - Undefined Identifier
anonymous
anonymous at example.com
Tue Mar 18 16:26:26 PDT 2014
On Tuesday, 18 March 2014 at 23:10:05 UTC, Chris Williams wrote:
> Annoying that formatting the string is required. I think you're
> right that it's ignoring my alias parameter because I'm not
> using it. Formatting doesn't accomplish anything except to use
> the parameter. But in exchange, you have to relate your format
> arguments to the %s entries, instead of the q{} contents just
> being code.
>
>
> import fs = std.file;
> import std.stdio;
> import std.string: format;
>
> template gotoPath(alias path) {
> enum gotoPath = format(q{
> string currPath = fs.getcwd();
> scope (exit) fs.chdir(currPath);
> fs.chdir(%s);
> }, __traits(identifier, path));
> }
>
> void doStuff(string targetDirectory) {
> mixin(gotoPath!(targetDirectory));
> writefln("b %s", fs.getcwd());
> }
>
> void main() {
> writefln("a %s", fs.getcwd());
> doStuff("/etc");
> writefln("c %s", fs.getcwd());
> }
I feel like there might be a misunderstanding. It's not that the
parameter was ignored because it wasn't used. You're not giving
the compiler a little extra help.
You're building a string from the parameter. __traits(identifier,
path) isn't "path", it's "targetDirectory" (in this specific
instantiation).
More information about the Digitalmars-d-learn
mailing list