On Wednesday, 26 April 2023 at 18:24:08 UTC, DLearner wrote:
Consider:
```
struct S1 {
   int A;
   int B;
   int foo() {
      return(A+B);
   }
}

struct S2 {
   int A;
   int B;
}
int fnAddS2(S2 X) {
   return (X.A + X.B);
}

There are scenarios that won't let you use the second form, e.g. putting your struct under the `with()` statement:

```d
with (S1) {
    auto sum = foo(); // Works correctly
}

with (S2) {
auto sum = foo(); // Error: function foo(S s) is not callable using argument types ()
}
```

In this case, the first option will be better. But there are no real "best practices" defined AFAIK.

However, the second form let you generalize the pattern by using template declaration:

```d
int fnAdd(T)(T v) {
return (v.A + v.B); // Doesn't matter what type is this if it has both members A and B
}

s1.fnAdd();
s2.fnAdd();
```

Reply via email to