Thread overview
post/pre-increment/decrement and property
Feb 07, 2012
Vidar Wahlberg
Feb 07, 2012
Robert Clipsham
Feb 07, 2012
Timon Gehr
Feb 08, 2012
Robert Clipsham
Feb 08, 2012
Jacob Carlborg
February 07, 2012
Take the following code:
int _foo;
@property auto foo() {
        return _foo;
}
@property auto foo(int foo) {
        return _foo = foo;
}
void main() {
        ++foo;
}


This won't compile, and it sort of makes sense (at least to me), but is it (or will it in the future be) possible to achieve this in some way?

I like to encapsulate class/struct members this way so I can easily add validation of the value in the setter at a later time (granted, I can add getter/setter properties when it turns out that I do need to validate the values, but that's beside the point).
February 07, 2012
On 07/02/2012 22:37, Vidar Wahlberg wrote:
> Take the following code:
> int _foo;
> @property auto foo() {
> return _foo;
> }
> @property auto foo(int foo) {
> return _foo = foo;
> }
> void main() {
> ++foo;
> }
>
>
> This won't compile, and it sort of makes sense (at least to me), but is
> it (or will it in the future be) possible to achieve this in some way?
>
> I like to encapsulate class/struct members this way so I can easily add
> validation of the value in the setter at a later time (granted, I can
> add getter/setter properties when it turns out that I do need to
> validate the values, but that's beside the point).

Try this:
----
int _foo;
@property ref foo() {
        return _foo;
}
@property ref foo(int foo) {
        return _foo = foo;
}
void main() {
        ++foo;
}
----

Using 'ref' instead of auto returns a reference to _foo, allowing it to be modified.

-- 
Robert
http://octarineparrot.com/
February 07, 2012
On 02/07/2012 11:54 PM, Robert Clipsham wrote:
> On 07/02/2012 22:37, Vidar Wahlberg wrote:
>> Take the following code:
>> int _foo;
>> @property auto foo() {
>> return _foo;
>> }
>> @property auto foo(int foo) {
>> return _foo = foo;
>> }
>> void main() {
>> ++foo;
>> }
>>
>>
>> This won't compile, and it sort of makes sense (at least to me), but is
>> it (or will it in the future be) possible to achieve this in some way?
>>
>> I like to encapsulate class/struct members this way so I can easily add
>> validation of the value in the setter at a later time (granted, I can
>> add getter/setter properties when it turns out that I do need to
>> validate the values, but that's beside the point).
>
> Try this:
> ----
> int _foo;
> @property ref foo() {
> return _foo;
> }
> @property ref foo(int foo) {
> return _foo = foo;
> }
> void main() {
> ++foo;
> }
> ----
>
> Using 'ref' instead of auto returns a reference to _foo, allowing it to
> be modified.
>

Yes, but then he cannot verify the new value.
February 08, 2012
On 07/02/2012 23:04, Timon Gehr wrote:
>> Try this:
>> ----
>> int _foo;
>> @property ref foo() {
>> return _foo;
>> }
>> @property ref foo(int foo) {
>> return _foo = foo;
>> }
>> void main() {
>> ++foo;
>> }
>> ----
>>
>> Using 'ref' instead of auto returns a reference to _foo, allowing it to
>> be modified.
>>
>
> Yes, but then he cannot verify the new value.

So what's actually being asked is can the following happen then?

++foo;

becomes:

foo(foo + 1);

-- 
Robert
http://octarineparrot.com/
February 08, 2012
On 2012-02-08 01:50, Robert Clipsham wrote:
> On 07/02/2012 23:04, Timon Gehr wrote:
>>> Try this:
>>> ----
>>> int _foo;
>>> @property ref foo() {
>>> return _foo;
>>> }
>>> @property ref foo(int foo) {
>>> return _foo = foo;
>>> }
>>> void main() {
>>> ++foo;
>>> }
>>> ----
>>>
>>> Using 'ref' instead of auto returns a reference to _foo, allowing it to
>>> be modified.
>>>
>>
>> Yes, but then he cannot verify the new value.
>
> So what's actually being asked is can the following happen then?
>
> ++foo;
>
> becomes:
>
> foo(foo + 1);

Yes, we need some form of property rewrite. Wasn't someone working on that?

-- 
/Jacob Carlborg