004
06.12.2009, 22:14 Uhr
0xdeadbeef
Gott (Operator)
|
Naja, du brauchst auf jeden Fall ein Objekt vom Typ A, um A::f aufzurufen. Wenn du das hast, kannst du allerdings mit Funktionsobjekten arbeiten - wenn dein Compiler TR1 unterstützt, sieht das etwa so aus:
C++: |
#include <functional> #include <iostream>
#ifdef __GNUC__ #include <tr1/functional> #endif
struct A { double f(double x) { std::cout << "A::f(" << x << ")" << std::endl; return x; } };
double g(double x) { std::cout << "g(" << x << ")" << std::endl; return x; }
double call_function(std::tr1::function<double(double)> const &func, double param) { func(param); }
int main() { A a;
using std::tr1::placeholders::_1;
call_function(g, 10.0); call_function(std::tr1::bind(std::mem_fun(&A::f), &a, _1), 20.0); }
|
...ansonsten gibt es das ganze auch in Boost. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 06.12.2009 um 22:15 Uhr von 0xdeadbeef editiert. |