Andrey:
alias short Type1;
The "alias X Y;" syntax is going to be deprecated, so use "alias
Y = X;" if your compiler already supports it.
alias Type1[100]* Type2; // if I take out '*' I will have to
type it everywhere, because arrays in D2 always 'by value'
Adding the * everywhere could be a good thing, because it makes
the code more explicit. Even in Linux kernel typedefs that just
mask out a pointer are not appreciated a lot. D code that uses
pointers to fixed size arrays is very uncommon in D, so adding a
* there is not going to cause troubles.
struct Type3
{
Type1 key;
int flags;
int arrLen;
Type2 f; // this struct can be *optionally* extended by the
array
}
The common way to create a variable length struct in D is to use
a zero length fixed size array (and no pointers):
struct Type3 {
Type1 key;
int flags;
int arrLen;
Type1[0] f;
}
But if you don't mind the double indirection using a dynamic
array is simpler:
struct Type3 {
Type1 key;
int flags;
Type1[] f;
}
Bye,
bearophile