On Friday, 15 October 2021 at 21:47:21 UTC, Paul Backus wrote:
On Friday, 15 October 2021 at 20:33:33 UTC, JN wrote:
Is there some nice way of achieving something like this C99
code in D?
```c
#include <stdio.h>
typedef struct {
int x, y;
} inputs_t;
void foo(inputs_t* optional_inputs)
{
if (!optional_inputs) {
printf("0 0\n");
} else {
printf("%d %d \n", optional_inputs->x,
optional_inputs->y);
}
}
int main(void) {
foo(NULL); // prints 0 0
foo(&(inputs_t){.x = 5, .y = 6}); // prints 5 6
}
```
```d
static global(alias value) = value;
struct Inputs { int x, y; }
void foo(Inputs* inputs)
{
import std.stdio;
if (inputs is null)
writeln("0 0");
else
writeln(inputs.x, " ", inputs.y);
}
void main()
{
foo(null);
foo(&global!(Inputs(5, 6)));
}
```
Nice trick, so far Paul's answer is the cleanest, 0 imports,
doesn't change the signature of the method, and he doesn't create
overloading
I remember i was once trying to achieve the same as OP, i ended
up just using a local variable