On Saturday, 16 December 2017 at 21:11:43 UTC, Marc wrote:
On Saturday, 16 December 2017 at 20:05:15 UTC, Anonymouse wrote:
On Saturday, 16 December 2017 at 19:57:30 UTC, Marc wrote:
C# has a quite nice way to store metadata about a property by
a feature called atributes[1]. For example, I can write
something like this:
class A {
[TextSize(256)]
string Name { get; set; }
}
So using runtime/reflection I can retrieve the TextSize value
associated to A.name property.
Does D have something similar?
UDAs? User Defined Attributes.
https://dlang.org/spec/attribute.html#UserDefinedAttribute
http://ddili.org/ders/d.en/uda.html
class A {
@TextSize(256)
string name() { /* ... */ }
}
I can't "pack" an object, right? In C#, TextSize is a class and
256 is constructor's first argument. In D it's pretty much an
array but I guess it's close enough. Thanks!
No, it's either a struct or a class and it's not included in the
class itself.
You use the __trait(getAttributes) to retrieve the value when
needed:
```
struct TextSize {int value;}
class A {
@TextSize(256)
string name() { return ""; }
}
class B {
string name() { return ""; }
}
static assert(__traits(classInstanceSize, A) ==
__traits(classInstanceSize, B));
```