![]() |
Events as Properties in C++
Was ich in C++ vermisse, ist die Möglichkeit Events (im Delphi Sinne) einem Objekt zuzuweisen (als Eigenschaft). Oder habe ich etwas verschlaffen ?
Wie geht man da in c++ vor ? |
Re: Events as Properties in C++
**push**
|
Re: Events as Properties in C++
C++ Syntax:
typedef void __fastcall (__closure *TSocketNotifyEvent)(System::TObject* Sender, TCustomWinSocket* Socket); __property TSocketNotifyEvent OnClientDisconnect = {read=FOnClientDisconnect, write =FOnClientDisconnect}; Sollte laut Delphihilfe so ähnlich gehen wie in Delphi |
Re: Events as Properties in C++
Properties sind aber nicht Standard-C++ sondern eine Borland-Erweiterung.
In C++ gibt es keine Properties, wo man einfach instanz.variable=wert macht und es wird automatisch eine get/set-Methode aufgerufen. |
Re: Events as Properties in C++
@Net7: Das ist aber Borland C++ Dialekt.
Ich meinte eher C++ Standard. |
Re: Events as Properties in C++
Zitat:
Ohne das Property musst du halt mit Getter- und Setter-Methoden arbeiten. Properties sind da ja nur eine vereinfachende Schreibweise. |
Re: Events as Properties in C++
Danke. Ich habe das schon so gemacht, ich habe nur gehoft dass es halt einfacher geht.
Und was die Methoden zeiger angeht, die Methoden, auf die man zeigt, dürfen leider nicht member functions sein sodern in global scope definiert sein. Oder ? |
Re: Events as Properties in C++
Zitat:
Code:
Ist zwar ungetestet, sollte aber funktionieren. Verwenden tut man ein derartiges Template wie folgt:
template <class ClassType, typename ReturnType, typename Parameter1>
class functor_1 { public: // declare functor typedef ReturnType (ClassType::*Callback)(Parameter1); // setup functor functor_1(ClassType *some_object, Callback some_method) this->_object = some_object; this->_callback = some_method; }; // call functor ReturnType operator()(Parameter1 param1) { return (_object->*_callback)(param1); } private ClassType *_object; Callback _callback; }
Code:
ClassA a;
ClassB b; functor_1<ClassA, int, int> *functor; int ClassB::emit_event() { return functor(3); } int ClassA::some_method(int i) { std::cout << i; return ++i; } int main() { functor = new functor_1<ClassA, int, int>(&a, &ClassA::some_method); int blubb = b.emit_event(); } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz