digitalmars.D.learn - Possible to overload assignment of struct field ??
- james.p.leblanc (24/24) Aug 23 2021 Greetings,
- =?UTF-8?Q?Ali_=c3=87ehreli?= (19/19) Aug 23 2021 On 8/23/21 10:25 PM, james.p.leblanc wrote:
- james.p.leblanc (12/31) Aug 23 2021 Ali,
Greetings, With a struct, there are many overload possibilities available. However, I haven't been able to find how to overload assignment of **selected fields** of a struct. For example, suppose: struct Foo{ int a; int b; ... } void main(){ auto x = Foo( 1, 2); // so x now instantiates x.a = 100; // suppose I wish to enforce that a<5?? ... } (I understand this is basically a field "setter" idea that is most often associated with classes. So, another way to state the quesion might be: "How can a field setter be done on a **already instantiated** struct?) Best Regards, James
Aug 23 2021
On 8/23/21 10:25 PM, james.p.leblanc wrote: So, you need a "property". Easy... :) 1) Rename the member e.g. as a_. 2) Write setter and getter functions named 'a'. struct Foo{ int a_; int a() const { return a_; } void a(int value) { a_ = value; } } void main(){ auto x = Foo(1); x.a = 100; assert(x.a == 100); } Ali
Aug 23 2021
On Tuesday, 24 August 2021 at 05:34:08 UTC, Ali Çehreli wrote:On 8/23/21 10:25 PM, james.p.leblanc wrote: So, you need a "property". Easy... :) 1) Rename the member e.g. as a_. 2) Write setter and getter functions named 'a'. struct Foo{ int a_; int a() const { return a_; } void a(int value) { a_ = value; } } void main(){ auto x = Foo(1); x.a = 100; assert(x.a == 100); } AliAli, Thank you ... yes! This is exactly what I needed, I have done something similar as you have shown for the "getter", but had a "brain-lock-up" when thinking about the setter. A bit embarassing for my, I admit. But, on the positive side ... the solution is now burned into my brain. Thanks again and Kind Regards, James
Aug 23 2021