Thread overview | ||||||
---|---|---|---|---|---|---|
|
January 25, 2005 Creating an array of structs, without a Class | ||||
---|---|---|---|---|
| ||||
Hello, how should I translate the following code from "Programming Windows, 5th Ed" (by Charles Petzold) into D Language? The D Language Specification does not show how to create an array of structures. In this Newsgroup, I have found examples of creating a "dynamic array of structs" but they require using a Class. Is there a way to do this without creating a Class. Thanks in advance. Kevin M /*----------------------------------------------- SYSMETS.H -- System metrics display structure -----------------------------------------------*/ #define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics [0])) struct { int iIndex ; TCHAR * szLabel ; TCHAR * szDesc ; } sysmetrics [] = { SM_CXSCREEN, TEXT ("SM_CXSCREEN"), TEXT ("Screen width in pixels"), SM_CYSCREEN, TEXT ("SM_CYSCREEN"), TEXT ("Screen height in pixels"), } ; |
January 25, 2005 Re: Creating an array of structs, without a Class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kevin M | On Tue, 25 Jan 2005 22:13:54 +0000, Kevin M wrote:
> Hello, how should I translate the following code from "Programming Windows, 5th Ed" (by Charles Petzold) into D Language? The D Language Specification does not show how to create an array of structures. In this Newsgroup, I have found examples of creating a "dynamic array of structs" but they require using a Class. Is there a way to do this without creating a Class. Thanks in advance.
>
> Kevin M
I think this will cover what you'd want to do:
import std.stream;
struct S {
char[] str;
int idx;
}
void main()
{
S[] arr;
for(int idx = 1; idx <= 10; idx++)
{
S s;
s.str = "dynamic"; // assign to str
s.idx = idx; // assign to idx
arr ~= s; // concatenate 's' to 'arr'
}
foreach(S s; arr) // iterate through the dynamic array
{
stdout.writefln(s.str,": ",s.idx);
}
static S[] s1 = [
{"static",11}
,{"static",12}
,{"static",13}
,{"static",14}
,{"static",15}
,{"static",16}
,{"static",17}
,{"static",18}
,{"static",19}
,{"static",20}
]; // initialize a static array of S's
S[] s2;
foreach(int i, S s; s1) // iterate thru the static array
{
stdout.writefln(s.str,": ",s.idx);
if(i % 2) {
s2 ~= s;
s2[length - 1].str = "what was " ~ s.str ~ " is now dynamic";
}
}
foreach(S s; s2) // iterate thru dynamic array
{
stdout.writefln(s.str,": ",s.idx);
}
}
|
January 26, 2005 Re: Creating an array of structs, without a Class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Kevin M | struct SysMetric { int iIndex ; char * szLabel ; char * szDesc ; } const int SM_CYSCREEN = 0; // whatever... const int NUMLINES = 2; SysMetric[NUMLINES] sysmetrics = [ {SM_CYSCREEN,"SM_CXSCREEN","Screen width in pixels"}, {SM_CYSCREEN,"SM_CYSCREEN","Screen height in pixels"} ]; int main(){ printf("%s\n",sysmetrics[0].szDesc); printf("%s\n",sysmetrics[1].szDesc); return 0; } |
January 26, 2005 Re: Creating an array of structs, without a Class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | Thanks Ben, that's what I was looking for. Kevin M In article <ct6n69$309d$1@digitaldaemon.com>, Ben Hinkle says... > >struct SysMetric >{ >int iIndex ; >char * szLabel ; >char * szDesc ; >} > >const int SM_CYSCREEN = 0; // whatever... >const int NUMLINES = 2; > >SysMetric[NUMLINES] sysmetrics = >[ > {SM_CYSCREEN,"SM_CXSCREEN","Screen width in pixels"}, > {SM_CYSCREEN,"SM_CYSCREEN","Screen height in pixels"} >]; > >int main(){ > printf("%s\n",sysmetrics[0].szDesc); > printf("%s\n",sysmetrics[1].szDesc); > return 0; >} > > |
Copyright © 1999-2021 by the D Language Foundation