Annotation programming in my design code ..
Brian via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jan 8 12:11:23 PST 2017
On Friday, 6 January 2017 at 17:48:23 UTC, Eugene Wissner wrote:
> On Friday, 6 January 2017 at 17:44:13 UTC, Brian wrote:
>> I would like to design features, how should I do?
>>
>> coding:
>>
>> class User
>> {
>> @GenerateProperty
>> int id;
>>
>> @GenerateProperty
>> string name;
>> }
>>
>> struct GenerateProperty
>> {
>> this(string propertyName)
>> {
>> propertyName = propertyName
>> }
>>
>> string propertyName;
>>
>> string getGenerateCode()
>> {
>> return "@property int " ~ propertyName ~ "() { return __" ~
>> propertyName ~ "; }\n at property int " ~ propertyName ~ "(int
>> value) { return __" ~ propertyName ~ " = value; }";
>> }
>> }
>>
>> result code:
>>
>> class User
>> {
>> @property int id() { return __id; }
>> @property int id(int value) { return __id = value; }
>>
>> @property string name() { return __name; }
>> @property string name(int value) { return __name = value; }
>>
>> private
>> {
>> int __id;
>> string __name;
>> }
>> }
>
> Look into https://github.com/funkwerk/accessors for the
> implementation.
> You should have a mixin which iterates through all class
> members and generates the properties.
Can write this code to impl it?
import accessors;
import std.stdio;
class Base
{
mixin(GenerateFieldAccessors);
}
class Person : Base
{
@Read @Write
private uint age_;
@ConstRead
private string name_;
this(in string name, in uint age = 0)
{
this.name_ = name;
this.age_ = age;
}
}
void main()
{
auto person = new Person("Saul Kripke");
person.age = 57;
writeln(person.name, ": ", person.age);
}
More information about the Digitalmars-d
mailing list