bool ändert sich komischerweise bei Loki::StaticDispatcher



  • winexec* schrieb:

    Hallo,

    Kann es sein, dass du in dieser Zeile eine Variable erstellst, die auf false ist und mit der du dann weiterarbeitest?

    HatchingExecutor() : bool_(false) { std::cout << "Konstruktor" << std::endl; }

    Das hab ich mir auch schon gedachte, aber der Konstruktor wird ja nur einmal aufgerufen und hier setze ich sie auf true:

    if(lhs.x_ == rhs.x_)
            {
                bool_ = true;
            }
            std::cout << "Bool: " << bool_ << " Adresse: " << &bool_ << std::endl;
    

    Sonst gibt es einfach keinen Punkt wo ich sie auf false setze. Es ist zum heulen 😞

    mfg.



  • Hallo,

    Guck noch einmal, ob das wirklich durchlaufen wird. Aber ansonsten wüsste ich nicht vom vorgegebenen Code her, wo der Fehler liegt.

    MFG winexec*



  • winexec* schrieb:

    Hallo,

    Guck noch einmal, ob das wirklich durchlaufen wird.

    Sonst würde er ja nicht Bool: 1 ausgeben, oder?

    mfg.



  • vielleicht liegt es ja daran, dass bei

    Dispatch::Go(a, c, exec);
    

    eine kopie von exec übergeben wird...



  • ... schrieb:

    vielleicht liegt es ja daran, dass bei

    Dispatch::Go(a, c, exec);
    

    eine kopie von exec übergeben wird...

    Aber dann würde doch "Konstruktor" nochmal ausgegeben?

    edit: Scheiße, da wird ja dann der Kopierkonstruktor aufgerufen, mein Fehler. Okay daran liegt's, wie lässt sich das umgehen, die Go Funktion ist ja nicht meine...

    mfg.



  • nicht wenn der copy-ctor ausgeführt wird



  • ... schrieb:

    nicht wenn der copy-ctor ausgeführt wird

    ist mir auch gerade eingefallen (siehe edit)



  • keine ahnung, kenn mich mit loki nicht aus. kannst ja mal

    typedef Loki::StaticDispatcher<HatchingExecutor&, Base, LOKI_TYPELIST_1(Widget)> Dispatch;
    

    probieren.



  • ... schrieb:

    keine ahnung, kenn mich mit loki nicht aus. kannst ja mal

    typedef Loki::StaticDispatcher<HatchingExecutor&, Base, LOKI_TYPELIST_1(Widget)> Dispatch;
    

    probieren.

    Auch gerade gedacht, nur: Intern verwendet die Lib ne Referenz und ich erhalte dann:

    /usr/include/loki/MultiMethods.h:45: Fehler: reference wird in Referenztyp »HatchingExecutor&« umgeformt
    

    Was ist der Sinn eigentlich, dass der Executor bei jedem Dispatch kopiert wird?? Was haben sich die Programmierer dabei gedacht??!?

    mfg.



  • eigentlich müsste go einen executor& nehmen. denn laut dem pdf hier heißt es

    StaticDispatcher implements the Go member function, which takes a BaseLhs&, a BaseRhs&, and an Executor& [...]


Anmelden zum Antworten