Ich werde C als Beispielsprache verwenden, um zu zeigen, was ich meine.Sprache, in der Variablentypen selbst Variablen sind?
struct parent
{
int x;
char y;
};
struct child
{
char y;
int x;
};
int foo(void * s, type obj_type)
{
// the casting is done using a "type" variable
obj_type obj = (obj_type) s;
return obj->x;
}
int main(int argc, char** argv)
{
type obj_type = struct parent *;
struct parent p;
p.x = 0;
//returns 0
foo(&p, obj_type);
obj_type = struct child *;
struct child c;
c.x = 5;
// returns 5
foo(&c, obj_type);
return 0;
}
Wie Sie sehen können, x für beide Strukturen an verschiedenen Orten im Speicher abgelegt, so kann ich nicht nur eine statische im Speicher versetzt haben. Ist das in C überhaupt möglich (einige Präprozessormagie, an die ich nicht denken konnte)? Ich nehme an, nein, aber gibt es Sprachen, in denen Typen selbst als Variablen verwendet werden können? Ich würde gerne die Implikationen der Typ-zentrierten Programmierung erkunden
EDIT: wie itsme86 wies darauf hin, C# hat diese Fähigkeit mit der Klasse Type. Auch C++ Concepts und Haskell Type-Klasse sind von Interesse.
Ich glaube nicht, ich folge Ihre Bitten. Willst du 'return obj-> x;' um 'int' zurückzugeben? –
ja. Abhängig von dem Typ-Operator kann obj-> x an der Adresse von obj liegen oder es könnte ein Offset von 1 Byte entfernt sein (angesichts der Struktur-Einrichtung). Was ich will, ist eine Variable, die verwendet werden kann, um Typen anstelle von Werten zu identifizieren – m1cky22
Die Funktion, die Sie suchen, ist [Typ Introspektion] (https://en.wikipedia.org/wiki/Type_introspection). Es ist in einigen objektorientierten Sprachen verfügbar, aber nicht in C (obwohl Sie es einbinden können, indem Sie ein 'type'-Mitglied als erstes Mitglied all Ihrer Strukturen hinzufügen). – user3386109