 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Erik Rull Guest
|
Posted: Fri Dec 15, 2006 2:49 am Post subject: verschachtelte Elemente unterschiedlicher G röße? |
|
|
Hallo zusammen,
dass man structs prima schachteln kann und auch statisch prima mittels
{} initialisieren kann ist mir bekannt.
Ich habe nun jedoch das Problem, dass ein Teil des geplanten Structs in
verschiedenen Instanzen unterschiedlich viel Speicher belegen kann.
Es sieht in etwa so aus: (wenns gehn tät!)
struct A
{
int a;
char b;
};
struct B
{
int x;
A in[];
A out[];
};
B instance1[] {
{1,{{2,'a'},{3,'c'},{12,'z'}},{{12,'q'},{34,'c'},{33,'i'}}},
{-31,{{32,'g'},{6,'p'}},{{32,'q'},{30,'f'},{3,'e'},{9,'m'}}},
}
Man beachte hierbei die unterschiedlichen Größen für in[] und out[] in
den beiden Zeilen.
Wie kann ich so etwas lösen? Der Compiler wirft einen Fehler, dass
überflüssige Einträge vorhanden wären.
Wenn ich alle Variablengrößen spezifiziere, also im struct in[3] und
out[2] schreibe, und die Werte entsprechend dimensioniere, dann gehts.
Wichtig ist, dass das Struct oder welcher Datenhaltungstyp auch immer,
statisch und mit möglichst wenig Schreibaufwand initialisiert werden
kann. Also so wie ich es oben versucht habe, wäre es optimal.
Grüße,
Erik |
|
| Back to top |
|
 |
Hubert Schmid Guest
|
Posted: Sat Dec 16, 2006 5:53 pm Post subject: Re: verschachtelte Elemente unterschiedlicher Größ e? |
|
|
Erik Rull <webmasterspam (AT) rdsoftware (DOT) de> writes:
| Quote: | Ich habe nun jedoch das Problem, dass ein Teil des geplanten Structs
in verschiedenen Instanzen unterschiedlich viel Speicher belegen
kann.
Es sieht in etwa so aus: (wenns gehn tät!)
struct A
{
int a;
char b;
};
struct B
{
int x;
A in[];
A out[];
};
B instance1[] =
{
{1,{{2,'a'},{3,'c'},{12,'z'}},{{12,'q'},{34,'c'},{33,'i'}}},
{-31,{{32,'g'},{6,'p'}},{{32,'q'},{30,'f'},{3,'e'},{9,'m'}}},
}
[..]
Wichtig ist, dass das Struct oder welcher Datenhaltungstyp auch
immer, statisch und mit möglichst wenig Schreibaufwand initialisiert
werden kann. Also so wie ich es oben versucht habe, wäre es optimal.
|
Ich bin mir nicht sicher, was du mit statischer Initialisierung
meinst. Vielleicht hilft dir Operator-Überladung weiter. Ein
vereinfachtes Beispiel sieht so aus:
#include <vector>
struct foo
{
int x;
std::vector<char> data;
explicit foo(int value) : x(value) { }
foo& operator()(char value)
{
data.push_back(value);
return *this;
}
};
foo bar[] = {
foo(1)('a'),
foo(2)('b')('c'),
};
--
Hubert Schmid - http://www.z42.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|