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

1

01.10.2006, 15:56

Functor variable läst sich nicht in einer Liste speichern

hi

ich have eine Functor klasse

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#pragma once
#include "stdafx.h"

class TFunctor   
    {
    public:
        virtual void operator()(float f)=0;
        virtual void Call(float f)=0;

    };

template<class TClass>
class TSpecificFunctor : public TFunctor
    {
    private:
        void (TClass::*fpt)(float);
        TClass*  pt2Object;
    public:
        TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(float))
            {pt2Object = _pt2Object; fpt=_fpt; };

        virtual void operator()(float f)
            { (*pt2Object.*fpt)(f); };

        virtual void Call(float f)
            { (*pt2Object.*fpt)(f); };

    
    };

in der ich die aufrufende Klasse und eine Funktion speichere
etwa so

C-/C++-Quelltext

1
TSpecificFunctor<MusicTask> m_Fader(this, &MusicTask::Fade);


wenn ich das ganze an eine liste , wie folgt übergebe

C-/C++-Quelltext

1
EventManagerTask::GetSingleton().AddEvent(new Event(&m_Fader));
geht auch noch alles gut. In der Liste wird die umhüllende Klasse samt Functor gespeichert, aber wenn ichdie deklarierende Funtion verlasse
also

C-/C++-Quelltext

1
2
3
4
5
6
7
void xyz(void)
{
        TSpecificFunctor<MusicTask> m_Fader(this, &MusicTask::Fade);

        EventManagerTask::GetSingleton().AddEvent(new Event(&m_Fader));
return;
}


vergist die Eventliste den Functor.

Woran liegt das????

Anonymous

unregistriert

2

01.10.2006, 16:03

Fake bitte closen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

01.10.2006, 16:17

Zitat von »"unsigned long"«

Fake bitte closen.

Wie kommst du darauf?

Anonymous

unregistriert

4

01.10.2006, 16:31

Re: Functor variable läst sich nicht in einer Liste

David Scherfgen

Zitat von »"epsilon2"«

ich have eine Functor klasse


ich habe dazu wieder dieses typische Gefühl bei Epsilon2, das er uns sowieso nur wieder verarscht, sich daran wieder so dermaßen aufgeilt, das er keinerlei sonstigen Bedürfnisse im Leben benötigt als dieses.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

01.10.2006, 16:58

Soll ich deine Threads auch schließen, wenn du mal wieder wäre mit h schreibst?
Zudem liegt das v direkt neben dem b, das kann passieren.

@epsilon
Zum Problem kann ich nichts sagen, da der Fehler offensichtlich in der EventManager-Klasse liegt.
Bring uns mal einen möglichst kleinen Beispielcode, der das Problem demonstriert.

6

01.10.2006, 17:59

an nix da: ignor an wie immer :roll: * mag mich wohl nicht *

an den rest:

C-/C++-Quelltext

1
2
3
4
void EvemtHandler::AddEvent(APointer<Event> &h)
{
EventList.pushback(h)
}

mehr passiert hier nicht und der funktor samt kapselnder Klasse wird gespeichert.

wird jedoch die aufrufende Funktion xyz beendet, vergist die Kapselnde Klasse Event den Funktor. Das ist ja auch soweit logisch schliesslich ist m_Fader ja kein Pointer. Würde ich Ihn als Pointer deklarieren müste die TempletKlasse Functor nicht abstrakt sein. Doch die Abstraktion brauch ich für dem veralgemeinerndern Type upcast von Specificfunctor auf Functor.

Gibt es ein einfacherer Lösung um eine Funktion zu kapseln (einen Trigger ( hier Event) quasi) die n mal ausgeführt wird bevor sie in den ewigen jagdgründen verschwindet und erst wieder nach erneuter triggerung neu gestartet wird?

Anonymous

unregistriert

7

01.10.2006, 18:02

Zitat von »"epsilon2"«

an nix da: ignor an wie immer :roll: * mag mich wohl nicht *
zurecht

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

01.10.2006, 18:49

Erzeuge das zu speichernde Objekte auf dem Heap statt auf dem Stack oder lege beim Einfügen in die Liste eine tiefe Kopie an.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

02.10.2006, 08:01

Wie schaut eigentlich der Konstruktor von Event aus?
@D13_Dreinig

10

02.10.2006, 18:11

@ nix da *hab dich lieb*

@ David Scherfgendas muss ich mal probieren

@David_pb

C-/C++-Quelltext

1
2
3
4
Even::Event(Functor *h)
{
func = h;
}

Werbeanzeige