Du bist nicht angemeldet.

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

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

1

27.10.2006, 17:36

Funktionszeiger / Funktionen als Parameter

Ich lese gerade ein Buch und musste einsehen, dass ich Deffizite in diesem Bereich hab.
Könnte mir jemand deshalb ganz kurz erklären, wie man Funktionen als Parameter und Funktionszeiger verwenden kann?

Ich bedanke mich für die Zeit, die ihr aufwenden konntet.

;)

Mit freundlichen Grüßen,
WhiteMike

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

27.10.2006, 18:37

Die Funktionspointer müssen immer schon die verwendeten Parameter und den Rückgabetyp mit angeben. Ein Funktionspointer auf eine Funktion die ein int übernimmt und zurückgibt würde so aussehen:

C-/C++-Quelltext

1
int (*pFunc)(int);

eine mögliche Verwendung wäre:

C-/C++-Quelltext

1
2
3
int foo(int test);
// pFunc auf int foo(int) verweisen lassen:

pFunc = foo;

man kann das Ganze per Typedef auch noch vereinfachen:

C-/C++-Quelltext

1
2
typedef int (*Functions)(int);
Functions pFunc = foo; // eigentlich das selbe wie oben


als Funktionsparameter z.B.:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void bar(int (*pFunc)(int));
int foo(int test);

int main()
{
// Aufruf:

bar(foo);
//...

}

Mögliche Definition von bar:

C-/C++-Quelltext

1
2
3
4
void bar(int (*pFunc)(int))
{
int temp = pFunc(10);
}

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

3

27.10.2006, 19:31

Wow!
Danke für den Traum von Antwort !

:shock:

Mit freundlichen Grüßen,
WhiteMike

4

27.10.2006, 20:09

Naja wenn des definiert hast kannst de es auch einfahc direkt als Parameter nutzen ... muss net immer das ganze zeug da noch mit reinschreiben ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

27.10.2006, 21:10

Zitat von »"Deviloper"«

Naja wenn des definiert hast kannst de es auch einfahc direkt als Parameter nutzen ... muss net immer das ganze zeug da noch mit reinschreiben ...


Ich hab auf das typedef dannach nicht weiter Bezug genommen, weil das nur kurz zeigen sollte, wie man die Übersicht etwas steigern kann. Es ging ja vorrangig darum, die Funktionspointer möglichst umfassend und nicht möglichst einfach unterzubringen ;)

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

6

26.11.2006, 17:14

Ich knüpf mal an den Thread hier an...

Ich möchte nen Funktionspointer von einer Memberfunktion erzeugen, hab schon viel gesucht und ausprobiert und krieg es einfach nicht korrekt hin :cry:

Das hier ist das brauchbarste was ich noch gefunden habe, allerdings compiliert nicht mal das Beispiel von dort bei mir (nutze DevCpp).

Kann bitte jemand anhand von Code erklären wie ich nen Zeiger auf ne MemberFunktion kriege, bitte?

Danke ;)
Gruss Beneroth

7

26.11.2006, 17:23

Hmm das was ich da gesehen hab wird halt durch den Umweg einer static Memberfunktion gemacht ... was verstehst du denn wo nicht?!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

26.11.2006, 18:37

pointer to member geht so:

C-/C++-Quelltext

1
(MyClass::*Whatever)( int, float );


functor != function pointer....

http://www.gamedev.net/reference/articles/article2116.asp könnte hilfreich sein ;)

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

9

26.11.2006, 18:47

@dot:

C-/C++-Quelltext

1
2
(MyClass::*Whatever)( int, float );
        Whatever = // ???


Soweit bin ich schonmal gekommen, aber die Initialisation bring ich nicht hin...
Artikel geh ich gleich lesen :D

Danke dir,
gruss Beneroth

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

10

26.11.2006, 19:25

wird so gemacht:

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
#include <iostream>


class A
{
public:
    int Method(int a, int b)
    {
        return a * b;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
        // Method deklarieren

    int (A::*Method)(int,int);

        // Method einen Wert zuweisen

    Method = &A::Method;

        // Objekt 'a' deklarieren.

    A a;

        // Method auf das Objekt 'a' aufrufen.

    std::cout << "5 * 4 = " << a.Method(5, 4);

    std::cin.sync();
    std::cin.get();

    return 0;
}
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Werbeanzeige