boost::function und funktionszeiger
-
hallo,
hier gleich zu meinem problem
#include <boost/bind.hpp> #include <boost/function.hpp> // zu integrierende Funktion f_i(x,y,z), z.B.: float xyzfunc (float x, float y, float z, int i) { return i+x*y*z;} // Funktion zur Integration von f_i(x,y,z) über 0-x2, 0-y2, 0-z2 float intfunc (float (*func)(float,float,float),float x2,float y2, float z2) { return 0.5*(func(0,0,0)+func(x2,y2,z2));} void main() { float x2=5, y2=3, z2=7, res[10]; boost::function<float (float, float, float)> f; // nun möchte ich z.B. die funktion f_i(x,y,z) mit // verschiedenen parametern i integrieren. // dazu möchte ich diese mit bind festlegen und der funktion // zum integrieren dann eine funktion von x,y,z übergeben for (int i=0; i<10; i++){ f=boost::bind(xyzfunc,_1,_2,_3,i); res=intfunc(f,x2,y2,z2); // <- und hier ist das problem std::cout << res << std::endl; } std::cin.get(); }1>c:\projektarbeit\boost-test\main.cpp(19) : error C2664: 'intfunc': Konvertierung des Parameters 1 von 'boost::function<Signature>' in 'float (__cdecl *)(float,float,float)' nicht möglich
1> with
1> [
1> Signature=float (float,float,float)
1> ]
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werdenkrieg ich mit function bzw. bind nun funktionzeiger oder funktionsobjekte? oder wie könnte ich das ganze so abändern, dass es funtkioniert?
gruß christian
-
ok, hat sich anscheinend erledigt. mit
// Funktion zur Integration von f_i(x,y,z) über 0-x2, 0-y2, 0-z2 float intfunc (boost::function<float(float,float,float)> func,float x2,float y2, float z2) { return 0.5*(func(0,0,0)+func(x2,y2,z2));}läufts erstmal.
-
djang0 schrieb:
ok, hat sich anscheinend erledigt. mit
// Funktion zur Integration von f_i(x,y,z) über 0-x2, 0-y2, 0-z2 float intfunc (boost::function<float(float,float,float)> func,float x2,float y2, float z2) { return 0.5*(func(0,0,0)+func(x2,y2,z2));}läufts erstmal.
is ja auch die richtige Lösung

der functor ist nunmal ein polymorphes objekt das sich wie eine Funktion verhält, und keine Funktion.