object in c++



  • Ich pack doch meinen Datentyp in value.vt
    Und da steht nun "String" drin.

    Und nun weiß ich dass in meinem VARIANT ein String drin ist. Aber den String muss ich doch nun noch in einen double wandeln.



  • Ja ok.. dann hast Du halt zwei Ebenen... hab es zwar immer noch nicht ganz verstanden, warum Du das brauchst... aber egal...

    Du hattest doch geschrieben dass Du als "Input" *immer* einen String bekommst... also gibt es doch nur eine Ebene, da die zweite ja immer "String" ist, oder?



  • Nochmals ganz einfach:

    Ich übergebe einer Funktion einen Wert der differiert.
    Und in der Funktion wird nun entschieden in welchen Datentyp gewandelt werden muss.

    So können also verschiedenste konstellation entstehen.

    String to double
    String to int
    int to double
    usw.



  • Du hattest doch geschrieben dass Du als "Input" *immer* einen String bekommst...

    Wo habe ich das geschrieben das musst du mir zeigen!



  • War nur meine interpretation.. .ist auch egal.. Du weisst ja wie Du es machen kannst ;=)



  • Du weisst ja wie Du es machen kannst ;=)

    Wie jetzt wo habe ich das nun wiederum gesagt. Ich habe doch noch keine Lösung!



  • Ich hab es auch nicht 100%ig verstanden. Poste am besten die C# Funktion.
    Falls du willst beschreibe mal die Aufgabenstellung abstrakt (also was du lösen willst). Mir erscheint das ganze gecaste etwas seltsam. Sowas ist nur selten notwendig.



  • Die c# Funktion kann ich nicht posten. Da ich die funktion selber nicht habe. Habe nur die Funktionsbeschreibung.

    Also noch ein Versuch:

    1. Dialog: Liste von Variablen eines fremden Systems
    2. Dialog: Bestimmte Variable wird ausgewählt.
    3. Variable hat Name, Wert und Datentyp
    4. Dialog: Der Wert soll nun geändert werden.
    5. Dialog: Eingabefeld ist String.
    6. Wert wird eingegeben. Button Wert schreiben
    7. Funktion wird aufgerufen. Dieser Funktion wird der String übergeben und die Informationen der Variablen
    8. Funktion entscheidet nun anhand des Variablentyps in der Variableninformation in welchen Wert der String umgewandlet werden muss.
    9. Funktion wird aber auch von anderer Stelle aufgerufen und dort z.B. ein Int übergeben und kein String.
    10. So nun muss ich erstmal entscheiden. Was kommt rein. String, int double.
    11. Dann muss ich entscheiden in was ich den Wert wandeln muss den ich erhalten habe. Und das anhand der Variableninformation der Variablen an der ich den Wert senden soll.

    So wenn nun was nicht verstanden Schritt nennen der unklar ist.



  • Du wirst es dann mehr oder weniger so machen müssen wie schon ein paar mal vorgeschlagen (mit einer Container Klasse).
    Ich denke in C# sieht es vielleicht anders aus, vom Prinzip passiert aber wohl das selbe was du in C++ machen musst.

    Du kannst dir evtl. noch ein switch sparen. Vorschlag:

    Variant ToInt(Variant v)
    {
      switch(v.datatype)
      {
        case STRING:
          return Variant(INT,StringToInt(v.StringValue));
       ...
      }
    }
    Variant ToDouble(Variant v);
    ....
    
    // array mit Funktionen zum Konvertieren (ToInt,ToDouble,...)
    Variant (*ConvertFunction)(Variant v);
    ConvertFunction convertFunctions[2];
    
    enum Datatype
    {
      INT = 0,
      DOUBLE = 1,
      ...
    };
    
    // konvertiere v zum Datentyp t
    Variant Convert(Variant v,Datatype t)
    {
       return (*convertFunctions[t])(v);
    }
    


  • wie schon ein paar mal vorgeschlagen

    Bis jetzt wurde das noch gar nicht vorgeschlagen: Aber nun habe ich wie gesagt ewig viele switch cases. Naja. 😞



  • gaugler schrieb:

    Die c# Funktion kann ich nicht posten. Da ich die funktion selber nicht habe. Habe nur die Funktionsbeschreibung.

    Wie meinst Du das? Mit Reflector kannst Du doch alles anschauen...



  • Wie meinst Du das?

    Na so wie ich es sage.

    Mit Reflector kannst Du doch alles anschauen...

    Schön. Wußte ich nicht, da ich nicht mit c# programmiere.

    Aber ich teste es jetzt mal.



  • So habe nun mal Reflector benutzt. Funktioniert ja super.
    Tja was soll ich sagen die Funktion ist ewig groß mit verschachtelten switch case und if else if Anweisungen.

    Also dann habe ich ja meine Lösung auch wenn ich nicht begeistert bin 🙄



  • Viel anders wird das nicht gehen.
    Wie gesagt du kannst dir wohl eine Ebene switches sparen, wenn du arrays von Funktionszeigern benutzt (alternativ z.B. std::map). Das ist dann wohl auch übersichtlicher.



  • ihoernchen schrieb:

    Wie gesagt du kannst dir wohl eine Ebene switches sparen, wenn du arrays von Funktionszeigern benutzt (alternativ z.B. std::map)

    Wie "Wie gesagt", das hast du doch nun zum ersten mal erwähnt.
    Ich weiß noch nicht genau wie du das meinst. Wie soll das funktionieren? Kannst du mir einen Ansatz geben.


Anmelden zum Antworten