Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Farnaby am 19. December 2005, 16:20

Titel: Memberfunktionen in C++ übergeben
Beitrag von: Farnaby am 19. December 2005, 16:20
Hi.

Mein Problem ist das folgende.
Ich möchte eine Funktion (nennen wir sie einfach ("integral") einer Numerikbibliothek verwenden:

double integral ( ... , double (*) (double), ... )

Nun möchte ich "integral" aus meiner Klasse heraus eine Memberfunktion meiner Klasse übergeben. Ist das irgendwie möglich?

(Ich kann die Memberfunktion nicht ohne weiteres global machen, da sie Klassenvariablen als Parameter benötigt. Andererseits lässt die Memberfunktion die Klasse konstant.)
Titel: Memberfunktionen in C++ übergeben
Beitrag von: bluecode am 19. December 2005, 18:14
hi,

nur wenn du die memberfunktion static machst. Des heißt aber, dass du kein this Zeiger hast.
Titel: Memberfunktionen in C++ übergeben
Beitrag von: Legend am 19. December 2005, 20:04
Ja, so ist das schlecht. Das war wohl ne C Bibliothek, oder nicht? ;)
Objektorientiert wäre man schon bei Integral anders rangegangen.
Titel: Memberfunktionen in C++ übergeben
Beitrag von: Farnaby am 19. December 2005, 20:17
hmm... son mist!
die bibliothek, die ich benutzen möchte nennt sich "matpack", sollte schon c++ sein, ist aber eben nur freeware.
gibts vielleicht eine nicht zu umständliche und ineffiziente möglichkeit sich eine interface-funktion zu bauen, mit der sowas dann möglich ist?
Titel: Memberfunktionen in C++ übergeben
Beitrag von: bluecode am 19. December 2005, 20:34
Du könntest die Klasse zB. zum Singleton machen. Also innerhalb der Klasse eine statische getInstance() Funktion, private/protected Kostruktoren, die Objektinstanz statisch innerhalb des Objekts speichern.
Titel: Memberfunktionen in C++ übergeben
Beitrag von: Legend am 20. December 2005, 00:43
Oder du schreibst dir schnell ne Routine zur numerischen Integration selber ... oder kann die was besonderes?
Titel: Memberfunktionen in C++ übergeben
Beitrag von: Farnaby am 20. December 2005, 14:09
naja, "schnell" selber schreiben ist gut, da ich sowas noch nie geschrieben hab könnte man immerhin auf den lerneffekt verweisen.  :?
zur not würde es auch mit copy und paste gehen, aber zu irgendwas sollte so eine bibliothek ja auch gut sein, oder? ich habe jetzt das folgende gemacht (siehe unten):
in meiner klasse habe ich einen pointer auf einen typ der klasse selbst eingeführt, um so in meiner funktion auf die klasse zugreifen zu können.
compiliert jetzt, lässt sich aber leider nicht verlinken...  :(  (gcc beschwert sich über "undefined reference"s)

class MatheKlasse
{
          .....
           double DieBesteFunktion(double);
           double suberfunktion (void);
           static MatheKlasse* DieMK;
           static double tollefunktion(double);
}

double MatheKlasse::suberfunktion (void)
{
           DieMK = this;
           x = integral (tollefunktion);
           ....          
           return x;
}

double MatheKlasse::tollefunktion(double x)
{
           return DieMK->DieBesteFunktion(x);
}
Titel: Memberfunktionen in C++ übergeben
Beitrag von: bluecode am 20. December 2005, 14:51
Du musst in ner cpp Datei die Membervariable DieMK definieren oder deklarieren (bin mir net sicher welches des jetzt is  :oops: ). Sprich:

MatheKlasse *MatheKlasse::DieMK = new MatheKlasse();

Das Problem is nur, dass du dem Benutzer deiner Klasse die gleiche Instanz (DieMK) geben musst sonst wirds problematisch mit den (nicht static) Membervariablen. D.h. private Kon/Destruktor + eine static getInstance() Funktion.[/quote]
Titel: Memberfunktionen in C++ übergeben
Beitrag von: Farnaby am 20. December 2005, 15:36
Funktioniert jetzt so!  8)
Vielen Dank!