Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:08

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: C++ Function Pointer frage
BeitragVerfasst: Di Mär 01, 2011 17:54 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich habe eine frage zu Function pointer in C++.
Habe eine Methode:

Code:
MyClass* CreateMyClass()
{
  return new MyClass();
}


Nun pack ich diese methode in einen void* typ.

Code:
void* procAddress = (void*)CreateMyClass;


Nun möchte ich diese methode aus dem procAddress aufrufen.
Dazu muss es irgendwie in einen function pointer konvertiert werden damit es als callback nutzbar wird.

Wie funktioniert sowas ?

In Delphi sehe das so aus:

Code:
function CreateMyClass() : TMyClass;
begin
  Result := TMyClass.Create();
end;


Code:
type
  TMyClassConstructor = function() : TMyClass;
var
  P : Pointer; // void*
  funcPtr : TMyClassConstructor;
  N : TMyClass;
begin
  P := @CreateMyClass;
  funcPtr := TMyClassConstructor(P);
  N := funcPtr();
end;




Danke,
Final


Zuletzt geändert von Lord Horazont am Di Mär 01, 2011 18:37, insgesamt 1-mal geändert.
Codetags


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ Function Pointer frage
BeitragVerfasst: Di Mär 01, 2011 18:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Einfacher als du denkst glaube ich. Jede Funktionsreferenz ohne () geschrieben ist in C++ ein Funktionspointer. Mit einem entsprechenden Typedef kannst du dann einfach zuweisen, z.B. für eine Funktion die zwei Floats nimmt und einen zurückgibt:
Code:
typedef float(*funktionspointertypname)(float, float);

Nicht getestet, sollte aber gehen.

Hier gibts mehr:
The Function Pointer Tutorials (von da stammt auch obiger Code)

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ Function Pointer frage
BeitragVerfasst: Di Mär 01, 2011 18:50 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Also zunächst einmal kann ich dir ein Tut. empfehlen, hier gleich die passende Lektion:

http://www.learncpp.com/cpp-tutorial/78 ... -pointers/

Zitat:
The parenthesis around *pFoo are necessary for precedence reasons,


Also sollte es wahrscheinlich so aussehen:
Code:
void (* procAddress) = CreateMyClass;


(Bei einer Funktionszuweisung zu einer Variable dürfen keine Klammern sein.)
Zitat:
This would actually assign the return value from a call to function goo() to pFoo, which isn’t what we want. We want pFoo to be assigned to function goo, not the return value from goo(). So no parenthesis are needed.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ Function Pointer frage
BeitragVerfasst: Di Mär 01, 2011 20:57 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Lord Horazont hat geschrieben:
Einfacher als du denkst glaube ich. Jede Funktionsreferenz ohne () geschrieben ist in C++ ein Funktionspointer. Mit einem entsprechenden Typedef kannst du dann einfach zuweisen, z.B. für eine Funktion die zwei Floats nimmt und einen zurückgibt:
Code:
typedef float(*funktionspointertypname)(float, float);

Nicht getestet, sollte aber gehen.

Hier gibts mehr:
The Function Pointer Tutorials (von da stammt auch obiger Code)

greetings


Das mit dem typedefs ist ja genau wie in Delphi.
Super das hat geklappt.

Besten dank ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ Function Pointer frage
BeitragVerfasst: Di Mär 01, 2011 21:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Warum brauchst du eigentlich Funktions-Pointer? Diese braucht man eigentlich nicht wenn man objekt-orientiert programmiert. Die einzig sinnvolle Anwendung die mir einfällt ist die Nutzung für Callback-Funktionen einer C-Library die darauf basiert.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ Function Pointer frage
BeitragVerfasst: Mi Mär 02, 2011 09:22 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Coolcat hat geschrieben:
Warum brauchst du eigentlich Funktions-Pointer? Diese braucht man eigentlich nicht wenn man objekt-orientiert programmiert. Die einzig sinnvolle Anwendung die mir einfällt ist die Nutzung für Callback-Funktionen einer C-Library die darauf basiert.


Ganz einfach, ich bastel gerade ein Pluginsystem das ähnlich aufgebaut ist,
wie das von Andora :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ Function Pointer frage
BeitragVerfasst: Mi Mär 02, 2011 16:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Auch OOP benutzt funktions pointer, das hat nichts mit OOP zu tun, denn java, c# und co sind OOP aber alle haben delegate pattern in nutzung. Wieso weil es oft Code leserlicher und einfacher macht. Im RadonFramework hab ich z.B. Events und Signals, welche ledeglich ein method oder function pointer im hintergrund nutzt.
Statt nun eine klasse zu erzeugen, die von einem vorher definiertem Interface ableitet , nur um dann eine instanz dieser einen Objekt zu zuweisen, damit ich gleiches verhalten hab ist ein enormer mehraufwand. Die VCL von Delphi, WPF von .Net und viele Netzwerk, Eventreiche Systeme aus Java nutzen delegates. Als C++ler sollte man aber die fastdelegates lib verwenden.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]