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
Zitat von »"the[V«
oid"]Meine mich zu erinnern, vor langer Zeit mal gelesen zu haben, Memberfunktionen könnten nicht über Funktionspointer angesprochen werden, hab es seit dem einfach vermieden. Zumal ich Funktionspointer nicht mag.
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 30 31 32 33 34 35 36 |
template<class Parent, class Container> void DeserializeIDToContainer(NetzwerkBuffer& buffer, Parent* obj, Container &Liste, void (Parent::*erasor)(typename Container::iterator), void (Parent::*adder)(unsigned int id)) { unsigned int tID; unsigned int count; std::list<unsigned int> idListe; buffer.Read(count); for(unsigned int counter = 0; counter < count; counter++) { buffer.Read(tID); idListe.push_back(tID); } for(typename Container::iterator temp = Liste.begin(); temp != Liste.end();) { bool found = false; for(std::list<unsigned int>::iterator it = idListe.begin(); it != idListe.end(); ++it) { if(*it == (*temp)->GetNetID()) { found = true; idListe.erase(it); break; } } if(found) ++temp; else if(erasor) (obj->*erasor)(temp++); else Liste.erase(temp++); } if(!idListe.empty()) _ASSERT(adder); for(std::list<unsigned int>::iterator it = idListe.begin(); it != idListe.end(); ++it) (obj->*adder)(*it); } |
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 30 31 32 33 34 35 36 37 38 |
class ThreadEntry { public: virtual DWORD main() = 0; virtual ~ThreadEntry() {}; }; class Thread { private: // ... static DWORD WINAPI ThreadProc(void* t) { return static_cast<ThreadEntry*>(t)->main(); } public: Thread(ThreadEntry& start); // ... }; // ... DWORD WINAPI Thread::ThreadProc(void* t) { return static_cast<ThreadEntry*>(t)->main(); } Thread::Thread(ThreadEntry& start) { if ((handle = CreateThread(0, 0, &ThreadProc, &start, 0, &id)) == 0) throw error_creating_thread(); } |
Anonymous
unregistriert
Zitat von »"the[V«
oid"]Meine mich zu erinnern, vor langer Zeit mal gelesen zu haben, Memberfunktionen könnten nicht über Funktionspointer angesprochen werden, hab es seit dem einfach vermieden.
Werbeanzeige