Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

11

08.10.2015, 14:53

Der wesentliche Unterschied besteht darin, dass ein Variant höchstens Typinformationen als C++ beinhalten kann. Letzendlich sind die Typen in deiner Sprache aber nicht C++ Typen. Das wird spätestens dann offensichtlich, wenn du Strukturen oder Klasse in deiner Sprache haben willst. Außerdem müssen bei einem boost::variant alle verfügbaren zur Compile Time an jeder Stelle der Verwendung bekannt sein. Mein Vorschlag war es also, wenn man ohnehin Infrastruktur für Typinformationen benötigt, die auf deine Sprache zugeschnitten sind, diese auch hier zu nutzen.

Zitat von »TGGC«

Word.

Excel.

12

09.10.2015, 07:44

Nein. Dann kannst du die Objekte nicht in einen Container packen. Das ist ja laut seinem Beispielcode die Grundvoraussetzung. Natürlich könnte man ein Interface ohne template anbieten, hätte dann aber wieder das gleiche Problem.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

09.10.2015, 10:51

Ich dachte schon an einen Visitor, der statt eval das ganze korrekt auflöst, aber auch das klappt nicht ohne Änderungen an den Expressions. Was denkt ihr?

Genau das wollte ich gerade vorschlagen. Die Frage, die du dir stellen solltest, ist: Was genau will ich mit dem Rückgabewert von eval() eigentlich anstellen? Von Variants oder Structs mit TypeId würde ich abraten.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

14

10.10.2015, 15:02

Der wesentliche Unterschied besteht darin, dass ein Variant höchstens Typinformationen als C++ beinhalten kann. Letzendlich sind die Typen in deiner Sprache aber nicht C++ Typen. Das wird spätestens dann offensichtlich, wenn du Strukturen oder Klasse in deiner Sprache haben willst. Außerdem müssen bei einem boost::variant alle verfügbaren zur Compile Time an jeder Stelle der Verwendung bekannt sein. Mein Vorschlag war es also, wenn man ohnehin Infrastruktur für Typinformationen benötigt, die auf deine Sprache zugeschnitten sind, diese auch hier zu nutzen.

Das bringt mich leider überhaupt nicht weiter.

Ich dachte schon an einen Visitor, der statt eval das ganze korrekt auflöst, aber auch das klappt nicht ohne Änderungen an den Expressions. Was denkt ihr?

Genau das wollte ich gerade vorschlagen. Die Frage, die du dir stellen solltest, ist: Was genau will ich mit dem Rückgabewert von eval() eigentlich anstellen? Von Variants oder Structs mit TypeId würde ich abraten.

Ja, ich denke, ich werde es jetzt über einen Visitor lösen. Jede Expression bekommt eine accept Methode, die einen Visitor annimmt. Innerhalb dieser accept Methode übergibt sich die Expression dann selbst. So werden die Typen wieder korrekt aufgelöst. :) Ein erster Test sah sehr vielversprechend aus.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige