Partially initialized structs?
Salih Dincer
salihdb at hotmail.com
Wed Feb 26 16:38:20 UTC 2025
On Wednesday, 26 February 2025 at 15:11:47 UTC, bkoie wrote:
> stuff like this is not even necessary if you dont need it now
> dont delcare an easy workaround is use some copy dictionary.
It's not that simple. I found the following code very
sympathetic. You can use the same method for structures that
contain dynamic arrays and can be customized as needed...
```d
alias MSS(T) = My_Static_Struct!T;
struct My_Static_Struct(Type)
{
Type id = 0;
Type[8] arr;
alias T = typeof(this);
@disable this ();
static init(Type id)
{
T that = void;
that.id = id;
return that;
}
}
alias MDS(T) = My_Dynamic_Struct!T;
struct My_Dynamic_Struct(Type)
{
Type id;
Type[] arr;
alias T = typeof(this);
@disable this ();
static init(Type id, size_t length)
{
alias R = Type[];
import std.range : uninitializedArray;
T that = void;
that.id = id;
that.arr = length.uninitializedArray!R;
return that;
}
}
import std.stdio;
void main()
{
alias T = ubyte;
MSS!T[] m1;
with(MSS!T)
{
m1 = [
init(41),
init(42)
];
}
m1.writefln!"%-(%s\n%)";
MDS!T[] m2;
with(MDS!T)
{
m2 = [
init(41, 4),
init(42, 8)
];
}
m2.writefln!"%-(%s\n%)";
}
/* PRINTS:
My_Static_Struct!ubyte(41, [0, 0, 0, 0, 0, 0, 0, 0])
My_Static_Struct!ubyte(42, [0, 0, 0, 0, 0, 0, 0, 0])
My_Dynamic_Struct!ubyte(41, [16, 32, 216, 47])
My_Dynamic_Struct!ubyte(42, [32, 32, 216, 47, 100, 127, 0, 0])
*/
```
SDB at 79
More information about the Digitalmars-d-learn
mailing list