In the example below, one of the attributes is @dbForeignKey!Position. pragma (msg, attr) gives me: dbForeignKey!(Position). I want to be able to extract the Postion as a type so I can call another template like: save!Position ();

Is this possible?

```d
import std.stdio;
import std.traits;
import std.format;

struct dbForeignKey(T)
{
}

struct Employee
{
        long id;
        string first_name;
        string last_name;
        @dbForeignKey!Position long default_position_id;
}

struct Position
{
        long id;
        string name;
}

void main()
{
        Employee e;

        structForm!Employee (e);

}

void structForm (T)(T data)
{
        string form = fullyQualifiedName!T;
                writeln ("form name = %s".format(form));
        string field_label;
        bool required;
                 foreach(field_name; FieldNameTuple!T)
                {
                writeln ("field name = %s".format(field_name));
                        auto field_value = __traits(getMember, data, 
field_name);
                writeln ("field value = %s".format(field_value));
foreach (attr; __traits(getAttributes, __traits(getMember, data, field_name)))
                {
                        pragma (msg, attr);
                        writeln ("attr = %s".format (attr.stringof));
                }
                writeln ("-----------------------------------");
                }
}
```
The compiler prints this for the pragma is:
```
dbForeignKey!(Position)
```

the program's output is:
```
form name = test.Employee
field name = id
field value = 0
-----------------------------------
field name = first_name
field value =
-----------------------------------
field name = last_name
field value =
-----------------------------------
field name = default_position_id
field value = 0
attr = dbForeignKey!(Position)
-----------------------------------
```

Reply via email to