in array gemische typen hineinpacken



  • otze schrieb:

    CStoll schrieb:

    PS: Verwendung von void* ist in C++ grauenhafter Programmierstil, void Variablen sind afaik sogar verboten.

    nein, void ist verboten, void* nicht! und manchmal braucht man void*

    habe ich doch gesagt: void ist verboten, void* ist grauenhafter Programmierstil (und nur für absolute Notfälle zu empfehlen)



  • exigoner sag mal worum es wirklich geht.
    ich denke dein programmdesign ist nicht gut.



  • Maxi schrieb:

    oder einfach ne struct, wenn ich dich richtig verstanden hab 🙂

    strcut data
    {
    char c;
    int i;
    };
    
    vector<data> array;
    

    mmh, jetzt hab ich erstmal verstanden wie das gemeint ist, das kann ich für meine klase verwenden....

    ............. schrieb:

    exigoner sag mal worum es wirklich geht.
    ich denke dein programmdesign ist nicht gut.

    tja ich wollt einen kleinen textparser schreiben, also hab ich mir überlegt, dass ich zur besseren bearbeitung den text in zahlen, buchstaben, und sonderzeichen aufspalte und diese dann in jeweils 3 versch. arrays packe wo das zeichen und die position im text steht.
    an sich ist die idee müll aber als sie mir einfach so kam wollt ich sie umsetzen. bisher trennt er auch wunderbar... aber ich habe schnell gemerkt dass ich eben alles(sowohl das zeichen ALS auch die POSITION als char) speichern muss
    und da macht

    mat.push_back(static_cast<char>(pos + '0') );
    

    nunmal ärger wenn ich ne 10+(11,12,13,...) übergebe.

    void* ist grauenhafter Programmierstil (und nur für absolute Notfälle zu empfehlen)

    sry ich hatte oben das verd. * vergessen.
    warum ist das eigentlich grauenhafter prg. stil. man sieht doch bei der zeiger-deklaration das er keinen typ hat und so würde dann theoretisch bein fixieren des zeigers auch ein typ zugewiesen, was ist daran ungut?
    wär es denn mit meinen problem möglich?(ich könnts eigentlich schneler ausprobieren als hier zu fragen?!)



  • Also wenn du Zeichen-Inhalt und -Position als Einheit speichern und verarbeiten willst, bietet sich ein struct (oder eben std::pair) geradezu an.

    @"void*": Weil du damit die Typ-Überprüfungen deines Compilers außer Kraft setzt. Normalerweise kann der nämlich sehr gut entscheiden, welche Typen wie kompatibel sind. Wenn du dagegen einen Zeiger in void* umwandelst, mußt du dir merken, was darin gespeichert ist - oder du zerlegst dir mal eben den kompletten Heap.



  • Man benutzt nicht mehr void* in C++, sondern ersetzt das nun meistens durch ein Template. Wenn ich mir nur den Titel anschaue könntest du boost::any suchen, aber ich hab deine Frage nicht gelesen.

    Gruß



  • nene ein template kommt hier nicht in frage, ich werd dann mal lieber ein struct benutzen, obwohl das void hier am einfachsten wär...
    thx schonmal



  • FireFlow schrieb:

    Man benutzt nicht mehr void* in C++, sondern ersetzt das nun meistens durch ein Template.
    Gruß

    soweit ich mich erinner, hat volkard hier vor eingier zeit seine delgates vorgestellt, die void* benutzt haben...



  • otze schrieb:

    FireFlow schrieb:

    Man benutzt nicht mehr void* in C++, sondern ersetzt das nun meistens durch ein Template.
    Gruß

    soweit ich mich erinner, hat volkard hier vor eingier zeit seine delgates vorgestellt, die void* benutzt haben...

    Sicher das das Volkard war? Ich weiß, dass ich hier letztens meine yadi (yet another delegate implementation) gepostet habe. Und die verwendet type erasue, also Templates, die säuberlich über void* gestülpt werden.

    @Volkard
    Könntest du deine Implementation bitte nochmal posten.



  • exigoner schrieb:

    ich werd dann mal lieber ein struct benutzen, obwohl das void hier am einfachsten wär...

    Bist du da sicher? Bei einem struct nimmt dir der Compiler die ganze Arbeit ab, bei deiner void*-Fummelei mußt du ganz alleine aufpassen, was du machst (und was du damit kaputtmachen könntest).



  • HumeSikkins schrieb:

    otze schrieb:

    FireFlow schrieb:

    Man benutzt nicht mehr void* in C++, sondern ersetzt das nun meistens durch ein Template.
    Gruß

    soweit ich mich erinner, hat volkard hier vor eingier zeit seine delgates vorgestellt, die void* benutzt haben...

    Sicher das das Volkard war? Ich weiß, dass ich hier letztens meine yadi (yet another delegate implementation) gepostet habe. Und die verwendet type erasue, also Templates, die säuberlich über void* gestülpt werden.

    @Volkard
    Könntest du deine Implementation bitte nochmal posten.

    ne, warst dann doch du 🙂

    sorry, für den kleinen verwechseler :). Ist ja auch schon ne weile her.


Anmelden zum Antworten