# C++   methode als argument übergeben



## langsamversteher (17. Oktober 2007)

*C++   methode als argument übergeben / Neue FRAGE!*

Hallo,

So, ich hab mir den Typ der Funktion als eigenständigen Typ definiert,
weil ich den Zeiger für ein CALLBACK zwischenspeichern muß.
Mit Deiner Definition wollte er's nicht annehmen, trotzdem Danke,
es hat weitergeholfen.
Das ganze sieht dann wie folgt aus:

    // test.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //

    #include "stdafx.h"

    char thisFunc(int testvar, char varb)
    {
        return 'a';
    }
    typedef char (*FuncType)(int, char);

    void callFuncA( FuncType funcA )
    {
        int a;
        char b;
        FuncType funcpointer;

        a = 1234;
        b = (char)0;
        funcpointer = funcA;
        b = funcpointer(a, 'b');
        printf("%c\n", b);
        fflush(NULL);
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
        callFuncA(thisFunc);
        return 0;
    }

Mein eigentliches Problem war aber, einen Zeiger auf eine Methode
einer C++-Klasse zu übergeben, um eine virtuelle WndProc zu bekommen.

Mit einigem Probieren und Suchen auf der MSDN-Seite kam ich dann auf
folgendes (für alle dies interessiert):

    // test.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //

    #include "stdafx.h"

    class MyClass
    {
    public:
        MyClass(void);
        ~MyClass(void);
        char thisFunc(int testvar, char var_b);
        //FuncType GetFuncPoint(void);
    };

    MyClass::MyClass(void)
    {
    }

    MyClass::~MyClass(void)
    {
    }

    typedef char (MyClass::*FuncType)(int, char);

    char thisFunc(int testvar, char var_b)
    {
        return 'a';
    }

    /*FuncType GetFuncPoint(void)
    {
        return thisFunc;
    }*/

    void callFuncA( FuncType funcA )
    {
        int a;
        char b;
        FuncType funcpointer;
        a = 1234;
        b = (char)0;
        funcpointer = funcA;
        b = funcpointer(a, 'b');
        printf("%c\n", b);
        fflush(NULL);
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
        FuncType funcpoint;
        MyClass* class_var;
        class_var = new MyClass();
        //funcpoint = class_var->GetFuncPoint();
        funcpoint = class_var->thisFunc;
        callFuncA(funcpoint);
        return 0;
    }


Wer es noch etwas genauer wissen will (Zwecks Klassen ableiten),
kann mir jamal ne Mail schreiben, dem helfe ich dann auch gerne weiter.
virtual_user(~No#Spam)gmx .de

Martin


----------



## sheel (17. Oktober 2007)

Ich nehme mal an dass du mit der Variablenübergabe generell vertraut bist.

Und wenn du zB eine Funktion mit
Rückgabetyp char
und 2 Parametern
int,float
deiner eigenen Funktion übergeben willst, heiist die Funktion dann zB

int meine_funktion(  (char)((*funktion_x)(int,float))  ){...}

Drinnen kannst du die Funktion ganz normal mit zB
funktion_x( 5 , 1.23);
aufrufen

Sheel


----------

