get module name of function
Alex
sascha.orlov at gmail.com
Sat Mar 30 08:49:36 UTC 2019
On Saturday, 30 March 2019 at 05:08:48 UTC, Alex wrote:
> How do I get the module name that a function is defined in?
>
There is
https://dlang.org/library/std/traits/module_name.html
> I have a generic template that
>
> auto Do(T)()
> {
> pragma(msg, moduleName!T);
> }
>
> in a module
This is strange, as not types are placed in a module, but symbols.
>
>
> and in another module I define a function
>
> void foo() { }
>
> and a class
>
> class C { }
>
> and call Do!(typeof(foo)) and Do!(C)
>
>
> but it fails for the function. I use type of because it fails
> when I do not.
>
> Is there not some uniform way to treat types like classes and
> functions as the same for meta programming?
>
Could you be more precise?
Variables have types. Classes define types. Both are symbols.
> If I do
>
> pragma(msg, moduleName!foo);
>
> in the same module as foo it works.
If something works in one case, and not in another, could you
create a minimal example of what does work and what does not?
>
> So I guess I have to use Do(alias T)() but then that breaks the
> class(cause I use `isClass`(= is(T == class) wrapper) and it
> complains ;/
This works:
´´´
import std.experimental.all;
void main()
{
Do!foo;
Do!C;
}
void foo(){}
class C{}
auto Do(alias s)()
{
pragma(msg, moduleName!s);
}
´´´
>
> I don't understand what the difference between alias and T is.
https://tour.dlang.org/tour/en/basics/templates
https://dlang.org/spec/template.html
https://dlang.org/articles/templates-revisited.html
http://ddili.org/ders/d.en/templates.html
http://ddili.org/ders/d.en/templates_more.html
>
> Alias can be most things and T must be a type, sometimes they
> overlap and sometimes they don't ;/ Is there any way to convert
> one thing to another when they do overlap and to know which
> direction to go?
>
> Do(alias T) or Do(T)?
>
>
> The second can only take types, the first can take symbolic
> expressions and other stuff but not types?
More information about the Digitalmars-d-learn
mailing list