Typendeklaration anhand übergebener Argumente

Können Datentypen in c++ anhand einer per Argumente übergebener Liste mit Werte/Datentypen Paaren deklariert werden?

Wie wird dieses Problem bei Variadics gelöst?

Templates, Variadics usw. können das ja nicht lösen, weil bei beiden die Datentypen schon vor dem kompilieren festgelegt werden müssen.

Durch die übergebene Liste wären jedoch Reihenfolge, Datentyp und Wert bekannt…

Ist eine andere Sprache die einzige Lösung?

Hallo,

Können Datentypen in c++ anhand einer per Argumente
übergebener Liste mit Werte/Datentypen Paaren deklariert
werden?

Ja, mit templates:

template
void f(T x) {
 T y; // eine Deklaration, deren Typ von der
 // Argumentenliste abhängt.
}

Oder meinst du etwas anderes? Wenn ja, frage bitte ein bisschen konkreter nach.

Wie wird dieses Problem bei Variadics gelöst?

Welches Problem denn genau?
Tendenziell sind variadische Argumentenlisten in einer stark typisierten Programmiersprache problematisch, ausser man legt den Typ der variadisch deklarierten Argumente vorher fest.

Templates, Variadics usw. können das ja nicht lösen, weil bei
beiden die Datentypen schon vor dem kompilieren festgelegt
werden müssen.

Die Typen von Templates müssen nicht zum Zeitpunkt des kompilierens des Template-Codes bekannt sein, sondern erst zu dem Zeitpunkt, an dem der Code kompiliert wird, der den Template-Code benutzt.

Durch die übergebene Liste wären jedoch Reihenfolge, Datentyp
und Wert bekannt…

Ist eine andere Sprache die einzige Lösung?

Du scheinst mir ein XY-Problem zu haben: http://www.perlmonks.org/index.pl?node_id=542341

Was willst du denn letztendlich erreichen?

Grüße,
Moritz

Hallo,

Können Datentypen in c++ anhand einer per Argumente
übergebener Liste mit Werte/Datentypen Paaren deklariert
werden?

Ja, mit templates:

template
void f(T x) {
T y; // eine Deklaration, deren Typ von der
// Argumentenliste abhängt.
}

Oder meinst du etwas anderes? Wenn ja, frage bitte ein
bisschen konkreter nach.

Ja, etwas anders:

argv[0] ist string mit funktionsname = „f“

argv[1] ist string Datentyp von Value von Parameter 1 = „DWORD“
argv[2] ist string Value von Parameter 1 der Funktion f = „NULL“

argv[3] ist string Datentyp von Value von Parameter 1 = „TCHAR“
argv[4] ist string Value von Parameter 1 der Funktion F = „A“

Jetzt Dein Vorschlag:

template
void f(T x) {
T y; // eine Deklaration, deren Typ von der
// Argumentenliste abhängt.
}

sagte ich doch schon, trotzdem muss der Datentyp von Parameter 1 der Funktion f zur Kompilierzeit bekannt sein:

switch (argv[1]) //geht in C++ nicht mit string, klar
{ //ab hier sind Deklarationen nur bis } gültig,
//wiederholte Deklarationen sind ungültig
case „DWORD“: DWORD param1 = (DWORD)argv[2];
break;
case „TCHAR“: TCHAR param1 = (TCHAR)argv[2];
break;
}

//Hier wird eine DLL dynamisch geladen
//Hier wird ein Handle zu eines DLL geholt
typedef int (__cdecl *PROC)(); //typedef Pointer zur DLL Funktion
PROC DllF;
__asm {
push param1 //Hier natürlich in abhängigkeit der Anzahl über-
call DllF //gebener Parameterpaare, aber erstmal eines…

}

Wie wird dieses Problem bei Variadics gelöst?

Welches Problem denn genau?

Das beschriebene

Tendenziell sind variadische Argumentenlisten in einer stark
typisierten Programmiersprache problematisch, ausser man legt
den Typ der variadisch deklarierten Argumente vorher fest.

Ich habe schon geglaubt, in c++99 (98) wären keine typedef templates möglich. Stimmt nicht. Das geht. Das Problem das ich habe ist, dass minimal 50 * 10^9 verschiedene Aufrufe möglich sind und ich soviele switches/ift/then/else Anweisungen keinem Anwender unterjubeln kann.

Templates, Variadics usw. können das ja nicht lösen, weil bei
beiden die Datentypen schon vor dem kompilieren festgelegt
werden müssen.

Die Typen von Templates müssen nicht zum Zeitpunkt des
kompilierens des Template-Codes bekannt sein, sondern erst zu
dem Zeitpunkt, an dem der Code kompiliert wird, der den
Template-Code benutzt.

Ich programiere hier ausführbaren Code, keine Bibliothek

Durch die übergebene Liste wären jedoch Reihenfolge, Datentyp
und Wert bekannt…

Ist eine andere Sprache die einzige Lösung?

Du scheinst mir ein XY-Problem zu haben:
http://www.perlmonks.org/index.pl?node_id=542341

Was willst du denn letztendlich erreichen?

Eine Wrapper DLL

Grüße,
Moritz

Du scheinst mir ein XY-Problem zu haben:
http://www.perlmonks.org/index.pl?node_id=542341

Wenn nichts anderes definiert wurde sind Parameter an Funktionen übergebene, Argumente an ein ausführbares Programm übergebene Werte, daher beantwortet Dein template-Vorschlag Y, obschon X gefragt und die Antowrt auf Y, die Du gegeben hast in der Frage selbst schon ausgeschlossen wurde, das daher, weil zumindest ich mich daran gewöhnt habe, dass es zuviele Y Beantworter gibt.

Du jedoch bist ein ganz hartnäckiger. Kannst Du das auf die Beantwortung meiner Frage übertragen?

Hallo,

Du scheinst mir ein XY-Problem zu haben:
http://www.perlmonks.org/index.pl?node_id=542341

Was willst du denn letztendlich erreichen?

Eine Wrapper DLL

Dann schau dir mal libffi an: http://sourceware.org/libffi/

Gruesse,
Moritz