Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

C/C++, Visual C++, Visual C++.NET Fragen und Antworten zu C/C++, Visual C++ und Visual C++.NET

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 94, Antworten: 5
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50850, Antworten: 1390
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26624, Antworten: 4194
Gehe zum ersten neuen Beitrag Windows Oberfläche (Schrift,...
Aufrufe: 177, Antworten: 10
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 65, Antworten: 5
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 122, Antworten: 12
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 18, Antworten: 2
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 50, Antworten: 2
Gehe zum ersten neuen Beitrag McAfee AVERT Stinger...
Aufrufe: 14, Antworten: 0
Gehe zum ersten neuen Beitrag Sticky Password 6.0.2...
Aufrufe: 26, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12.09.2006, 10:15   #1 (Direktlink)
Herb
Gast
 
Beiträge: n/a
Standard Funktionspointer auf beliebige Methode

Hallo Leute,

ich versuche gerade eine Art "EventHandling" umzusetzen und gehe dabei folgendermaßen vor:

Ich definiere einen Funktionszeiger à la

Code:
typedef void (*PTR) (EventArgs args)
Eine liste von solchen Pointern wird in der Klasse gespeichert, die das Ereignis auslösen soll. Wenn das Ereignis eintritt, soll die Liste durchlaufen und die Funktionen aufgerufen werden. So weit so gut.

Das Problem bei der Sache ist nun folgendes:
Die ganze Geschichte funktioniert prima, solange es sich um statische Methoden bzw. "normale" C-Funktionen - d.h. ausserhalb von Klassen - dreht.
In der Liste sollen aber auch Memberfunktionen anderer Klassen gespeichert werden können, und Sachen wie

Code:
typedef void (Klasse::*PTR) (EventArgs args)
funktionieren nicht, da Methoden aus verschiedenen Klassen gespeichert werden sollen. Es soll also eine beliebige Methode aus einer beliebigen Klassen gespeichert werden können - mit der richtigen Argumentliste natürlich. Geht so etwas überhaupt?

Die einzige Alternative, die mir bis jetzt eingefallen ist - ohne Funktionszeiger - wäre so eine Art Action Listener aus Java nachzubauen. Würde zwar Funktionieren, gefällt mir aber weniger da immer alle Methoden implementiert werden müssen - können ja unter Umständen recht viele sein - auch wenn man eigentlich nur auf ein Ereignis reagieren will.

Weiß hier jemand was oder hat eine Idee, wie das Problem anders (also ohne Funktionszeiger) gelöst werden könnte?

Danke im Voraus.
  Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 13.09.2006, 09:41   #2 (Direktlink)
Herb
Gast
 
Beiträge: n/a
Standard

Hab gerade doch noch einen Beitrag in einem anderen Forum gefunden, Pointer auf C-Funktionen und auf Memberfunktionen sind demnach nicht kompatibel, werde mir also mit einer Art "ActionListener" helfen (Wie ich darauf gekommen bin, dass ich alle Methoden implementieren muss ist mir ein Rätsel...).
Eine Frage zu den Funktionszeigern hätte ich allerdings noch:

Wenn ich in einer Basisklasse eine Funktionszeiger auf eine Memberfunktion in der Basisklasse erstelle, ist es dann irgendwie machbar, dass dieser Zeiger auch Methoden von geerbten Klassen annimmt, also in der Art:

Code:
class A
{
public: 
    void (*A::PFN)(int);
};

class B : public A
{
public:
    void function(int)
    {
        //machwas
    }
}

int main()
{
    B b = new B;
    b->PFN = B::function;
}
Dieser Code funktioniert nicht, soll nur ein Beispiel sein was ich mir vorstelle. Gibt es also eine Möglichkeit, den Funktionszeiger allgeimgültig zu definieren, so dass auch auf Methoden aus abgeleiteten Klassen gezeigt werden kann?
  Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an




Alle Zeitangaben in WEZ +2. Es ist jetzt 06:22 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2