Thread overview | ||||||
---|---|---|---|---|---|---|
|
August 26, 2015 Adding UDA at compile time | ||||
---|---|---|---|---|
| ||||
I wonder if there's a way to add UDA to functions at compile-time (so I can read later from other parts of application). Andrea |
August 26, 2015 Re: Adding UDA at compile time | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | On Wednesday, 26 August 2015 at 08:19:04 UTC, Andrea Fontana wrote:
> I wonder if there's a way to add UDA to functions at compile-time (so I can read later from other parts of application).
>
> Andrea
What do you mean? UDAs are already specified at compile time.
@("hello")
void foo() {
}
static assert(__traits(getAttributes, foo)[0] == "hello");
|
August 26, 2015 Re: Adding UDA at compile time | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Parrill | On Wednesday, 26 August 2015 at 14:01:00 UTC, Alex Parrill wrote:
> On Wednesday, 26 August 2015 at 08:19:04 UTC, Andrea Fontana wrote:
>> I wonder if there's a way to add UDA to functions at compile-time (so I can read later from other parts of application).
>>
>> Andrea
>
> What do you mean? UDAs are already specified at compile time.
>
>
> @("hello")
> void foo() {
>
> }
>
> static assert(__traits(getAttributes, foo)[0] == "hello");
__traits(setAttributes, ...)
It would be useful, for example, if I have a list of functions to mark. Let's say
enum toExport = ["oldFunction", "thisToo"];
foreach(d; toExport) __traits(setAttributes, ...);
|
August 26, 2015 Re: Adding UDA at compile time | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | On Wednesday, 26 August 2015 at 14:29:30 UTC, Andrea Fontana wrote:
>
> __traits(setAttributes, ...)
>
> It would be useful, for example, if I have a list of functions to mark. Let's say
>
> enum toExport = ["oldFunction", "thisToo"];
> foreach(d; toExport) __traits(setAttributes, ...);
Lots of compile-time information is fixed after the symbol is defined, making it effectively immutable. There's not, for example, a `__traits(setType, var)`.
If you want to apply a UDA to many functions at once, you can use the block syntax:
@("hello") {
void foo1() {}
void foo2() {}
}
// or alternatively
@("hello"):
void foo3() {}
void foo4() {}
Also if you're talking about the `export` keyword, then that's not a UDA.
|
Copyright © 1999-2021 by the D Language Foundation