using "invariant" with structs ... possible to call when a field value is set??

FeepingCreature feepingcreature at gmail.com
Sun Aug 8 11:36:51 UTC 2021


On Sunday, 8 August 2021 at 11:30:41 UTC, james.p.leblanc wrote:
> Hello,
>
> With structs, I understand that "invariant checking" is called 
> (from dlang tour):
>
>     It's called after the constructor has run and before the 
> destructor is called.
>     It's called before entering a member function
>     invariant() is called after exiting a member function.
>
> But, is is possible to have the invariant checking be performed
> whenever a field is directly set?
>
> For example, suppose a struct "S", has a field "x".  I would 
> like to
> have invariance check in cases such as:
>
> S.x = 4;
>
> Maybe there is a hidden set field function that gets called that
> might be exploitable??
>
> Thoughts on this?  Possible?  Better paths that I should 
> consider?
>
> Best Regards,
> James

You can make a field set function like so:

```
struct S
{
   private int x_;
   int x(int value) { return this.x_ = value; }
   int x() { return this.x_; }
}
```

This will then run invariants.

(boilerplate can automate that for you. 
https://code.dlang.org/packages/boilerplate cough 
self-advertisement cough)


More information about the Digitalmars-d-learn mailing list