HibernateD and DDBC - ORM and DB abstraction layer for D

Vadim Lopatin coolreader.org at gmail.com
Fri Apr 5 09:41:50 PDT 2013


On Friday, 5 April 2013 at 15:52:43 UTC, Dicebot wrote:
> On Friday, 5 April 2013 at 15:20:06 UTC, Jacob Carlborg wrote:
>> On 2013-04-05 16:03, Vadim Lopatin wrote:
>>
>>> 2) Read/write property
>>>   @property T someProperty() { ... }
>>>   @property xxx someProperty(T value) { ... }
>>>   treated as property with name 'someProperty'
>>>
>>> BTW, I don't know how to check if property is read/write in 
>>> compile time.
>>
>> If there's no better way you can always use 
>> __traits(compiles), something like this:
>>
>> __traits(compiles, { auto c = new Class; T v = c.someProperty; 
>> c.someProperty = T.init; });
>>
>> Currently that will compile regardless of @property or not.
>
> Quoting 
> https://github.com/rejectedsoftware/vibe.d/blob/master/source/vibe/http/restutil.d 
> :
>
> template isPropertyGetter(T)
> {
> 	enum isPropertyGetter = (functionAttributes!(T) & 
> FunctionAttribute.property) != 0
> 		&& !is(ReturnType!T == void);
> }
>
> template isPropertySetter(T)
> {
> 	enum isPropertySetter = (functionAttributes!(T) & 
> FunctionAttribute.property) != 0
> 		&& is(ReturnType!T == void);
> }

I'm iterating through class members using __traits(allMembers, 
T), then accessing member using _traits(getMember,T,memberName)

I'm not sure which one of the members with the same name will be 
returned by getMember... Property getter and setter have the same 
name...

Is there any better way to iterate through members of class?


More information about the Digitalmars-d-announce mailing list