On 2017-12-16 22:11, Marc wrote:

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!

In D it's an tuple of basically anything that is known at compile time, values or types:

alias foo = int;

struct TextSize
{
    int value;
}

int bar(int a) { return a; }

@(foo, 3, "asd", TextSize(256), bar(3))
class A {}

The following syntax is syntax sugar:

@TextSize(256)
class B {}

For:

@(TextSize(256))
class B {}

What's happening is that TextSize (all structs) has an implicit construct for all fields. An instance of TextSize is constructed at compile time and is used as a value in the UDA tuple.

The UDAs only exists during compile time (unless you explicitly save them somehow). Runtime reflection cannot be used, but compile time reflection can be used, using the "getAttribute" traits [1[

[1] https://dlang.org/spec/traits.html#getAttributes

--
/Jacob Carlborg

Reply via email to