View source code
Display the source code in std/traits.d from which this
page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a
Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Alias std.traits.getUDAs
Gets the matching user-defined attributes from the given symbol.
alias getUDAs(alias symbol, alias attribute)
= Filter!(isDesiredUDA!attribute,__traits(getAttributes,symbol));
If the UDA is a type, then any UDAs of the same type on the symbol will match. If the UDA is a template for a type, then any UDA which is an instantiation of that template will match. And if the UDA is a value, then any UDAs on the symbol which are equal to that value will match.
See Also
Example
struct Attr
{
string name;
int value;
}
@Attr("Answer", 42) int a;
static assert(getUDAs!(a, Attr) .length == 1);
static assert(getUDAs!(a, Attr)[0] .name == "Answer");
static assert(getUDAs!(a, Attr)[0] .value == 42);
@(Attr("Answer", 42), "string", 9999) int b;
static assert(getUDAs!(b, Attr) .length == 1);
static assert(getUDAs!(b, Attr)[0] .name == "Answer");
static assert(getUDAs!(b, Attr)[0] .value == 42);
@Attr("Answer", 42) @Attr("Pi", 3) int c;
static assert(getUDAs!(c, Attr) .length == 2);
static assert(getUDAs!(c, Attr)[0] .name == "Answer");
static assert(getUDAs!(c, Attr)[0] .value == 42);
static assert(getUDAs!(c, Attr)[1] .name == "Pi");
static assert(getUDAs!(c, Attr)[1] .value == 3);
static assert(getUDAs!(c, Attr("Answer", 42)) .length == 1);
static assert(getUDAs!(c, Attr("Answer", 42))[0] .name == "Answer");
static assert(getUDAs!(c, Attr("Answer", 42))[0] .value == 42);
static assert(getUDAs!(c, Attr("Answer", 99)) .length == 0);
struct AttrT(T)
{
string name;
T value;
}
@AttrT!uint("Answer", 42) @AttrT!int("Pi", 3) @AttrT int d;
static assert(getUDAs!(d, AttrT) .length == 2);
static assert(getUDAs!(d, AttrT)[0] .name == "Answer");
static assert(getUDAs!(d, AttrT)[0] .value == 42);
static assert(getUDAs!(d, AttrT)[1] .name == "Pi");
static assert(getUDAs!(d, AttrT)[1] .value == 3);
static assert(getUDAs!(d, AttrT!uint) .length == 1);
static assert(getUDAs!(d, AttrT!uint)[0] .name == "Answer");
static assert(getUDAs!(d, AttrT!uint)[0] .value == 42);
static assert(getUDAs!(d, AttrT!int) .length == 1);
static assert(getUDAs!(d, AttrT!int)[0] .name == "Pi");
static assert(getUDAs!(d, AttrT!int)[0] .value == 3);
struct SimpleAttr {}
@SimpleAttr int e;
static assert(getUDAs!(e, SimpleAttr) .length == 1);
static assert(is(getUDAs!(e, SimpleAttr)[0] == SimpleAttr));
@SimpleAttr() int f;
static assert(getUDAs!(f, SimpleAttr) .length == 1);
static assert(is(typeof(getUDAs!(f, SimpleAttr)[0]) == SimpleAttr));
struct FuncAttr(alias f) { alias func = f; }
static int add42(int v) { return v + 42; }
static string concat(string l, string r) { return l ~ r; }
@FuncAttr!add42 int g;
static assert(getUDAs!(g, FuncAttr) .length == 1);
static assert(getUDAs!(g, FuncAttr)[0] .func(5) == 47);
static assert(getUDAs!(g, FuncAttr!add42) .length == 1);
static assert(getUDAs!(g, FuncAttr!add42)[0] .func(5) == 47);
static assert(getUDAs!(g, FuncAttr!add42()) .length == 0);
static assert(getUDAs!(g, FuncAttr!concat) .length == 0);
static assert(getUDAs!(g, FuncAttr!concat()) .length == 0);
@FuncAttr!add42() int h;
static assert(getUDAs!(h, FuncAttr) .length == 1);
static assert(getUDAs!(h, FuncAttr)[0] .func(5) == 47);
static assert(getUDAs!(h, FuncAttr!add42) .length == 1);
static assert(getUDAs!(h, FuncAttr!add42)[0] .func(5) == 47);
static assert(getUDAs!(h, FuncAttr!add42()) .length == 1);
static assert(getUDAs!(h, FuncAttr!add42())[0] .func(5) == 47);
static assert(getUDAs!(h, FuncAttr!concat) .length == 0);
static assert(getUDAs!(h, FuncAttr!concat()) .length == 0);
@("alpha") @(42) int i;
static assert(getUDAs!(i, "alpha") .length == 1);
static assert(getUDAs!(i, "alpha")[0] == "alpha");
static assert(getUDAs!(i, 42) .length == 1);
static assert(getUDAs!(i, 42)[0] == 42);
static assert(getUDAs!(i, 'c') .length == 0);
Authors
Walter Bright,
Tomasz Stachowiak (isExpressions
),
Andrei Alexandrescu,
Shin Fujishiro,
Robert Clipsham,
David Nadlinger,
Kenji Hara,
Shoichi Kato
License
Copyright © 1999-2022 by the D Language Foundation | Page generated by ddox.