View mode: basic / threaded / horizontal-split · Log in · Help
February 07, 2012
post/pre-increment/decrement and property
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
Re: post/pre-increment/decrement and property
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
Re: post/pre-increment/decrement and property
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
Re: post/pre-increment/decrement and property
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
Re: post/pre-increment/decrement and property
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
Top | Discussion index | About this forum | D home