struct Prototype

Thomasio

Erfahrenes Mitglied
Ich würde gerne einen Prototyp von einem struct definieren, und diesem später, abhängig von einer Variablen verschiedene Inhalte geben.
Hier mal ein Beispiel, wie ich mir das dachte.
Ich weiss, dass das so nicht geht, weil ich in einer Funktion kein struct definieren darf.

Code:
struct MyStruct;
vector<MyStruct>MyVector;

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdShow)
{

// Irgendwas aus szCmdLine berechnen

if(Irgendwas)
{

struct MyStruct
{
int x;
int y;
};

}
else
{

struct MyStruct
{
string a;
string b;
};

}

...

}

Geht sowas überhaupt, und wenn ja, wie mache ich das richtig?
 
Hi,

ich bin mir noch nicht ganz sicher, was genau du erreichen willst. Aber wenn ich dich richtig verstehe, sind Templates das richtige für dich.

ein kleines Beispiel:
C++:
template<typename T>string _STRING(T someInput)
{
stringstream ss(someInput);
string s;
ss >> s;
return s;
}
Das habe ich gerade aus dem kopf geschrieben, sollte aber eigentlich gehen und wird sich so in meinen Programmen auch finden. Was macht es? Es verwandelt jeden Input, also egal welchen Datentyp in einen string. Also sind dies legale Aufrufe:
C++:
int i = 0;
string s = _STRING(i);
string s = _STRING("bla");
//usw

Falls du bei bestimmten Datentypen noch eine Fallunterscheidung brauchst, ist dies auch möglich (nennt sich Spezialisierung von Templates):
C++:
template<> _STRING(string someInput)
{
return someInput;
}

ebenso geht dies für structs:
C++:
template <typename T> 
struct Sdeinstruct { 
  T xyz; 
  T* pointer; 
};

Oder auch mit Klassen.
Daraus sollte es dir eigentlich möglich sein dein Vorhaben zu realisieren. Wenn du noch Rückfragen dazu hast oder ich dich falsch verstanden habe, helfe ich gerne noch weiter.


VG
kickerxy
 
Zuletzt bearbeitet von einem Moderator:
Hmmmm, das habe ich entweder nicht verstanden, oder es löst mein Problem nicht.

Ich habe eine Anwendung, die 2 verschiedene Funktionen hat, effektiv sind das 2 Programme in einem.
99% der beiden Programme sind identisch, darum wollte ich beide unter einen Hut bringen, sprich nur eine Anwendung schreiben, die beides kann, indem ich einfach immer dann wenn die beiden Programme verschiedene Dinge tun sollen einen switch() einbaue.
Welcher Typ das Programm sein soll übergebe ich ihm in szCmdLine.
Das Ganze funktioniert schon sauber, nur dieses struct muss in den beiden Programmen verschiedene Inhalte haben, aber der vector<MyStruct> muss global sein.
Gelöst habe ich das im ersten Anlauf, indem ich 2 structs und 2 vector definiere und dann via switch() den richtigen vector auswähle.

Dann kam mir die Idee, wenn ich einen Prototyp vom struct definiere und das richtige struct erst definiere nachdem ich weiss was da rein muss, könnte ich mir im Programm ein halbes Dutzend switch() sparen.
Wo ich drüber stolpere ist die Tatsache, dass ich erst im WinMain weiss, was ins struct muss und damit innerhalb einer Funktion bin, wo ich kein struct definieren darf.
 
Hallo,

warum packst du nicht einfach alle Elements in ein gemeinsames Struct und nutzt dann nur die Variablen, die für diesen Teil des Programms vorgesehen sind. Wenn du zb sowieso mit switch arbeitest fügst du noch eine zusätzliche Variable ein, die den Wert für den case-Teil beinhaltet.

Ansonsten kannst du noch mit Klassen und Vererbung arbeiten, allerdings wird das ganze dadurch nicht viel einfacher.
 
Hi.

Welchen Standard verwendest du denn?

Falls C++11, dann wäre es möglich auch unions zu verwenden.

Selbst in vorigen Versionen wäre es möglich mit Zeigern in der union zu arbeiten.

Ansonsten, falls Typen (Funktionen) unterschiedliches Verhalten (bei gleicher Struktur) zeigen sollen, denkt man ja eigentlich sofort an Polymorphie.
 
Ich habs mittlerweile fertig, mit allen Variablen in einem struct, das reicht mir völlig.
Trotzdem danke für den Tipp.
 

Neue Beiträge

Zurück