void do_something(foobar cb); // this function accepts argument which is a point of function do_something(obj); // but obj is a function. i think we should do it like tihs class A { }; class B { }; class C { public: int operator () (A*,B*){ cout<<"yes"<<endl; return 1; } }; typedef int (*foobar)(A*, B*); void do_something(foobar cb) { cout<<"something"<<endl; } A *aPtr=new A; B *bPtr=new B; C obj; foobar fooPtr=obj.operator(); //there is still error like this "argument of type `int (C::)(A*, B*)' does not match `int (*)(A*, B*)'" i can't correct it. but it may be helpful to you. 2008/6/2, Michael Bradley Jr <mbradley.jr@gmail.com>:
Hi,
i'm facing this problem may be someone on the list do have an elegant solution
class A; class B;
class C { int operator () (A*,B*) };
typedef int (*foobar)(A*,B*); void do_something(foobar cb);
C obj; do_something(obj); *ERROR*
did try boost::function<int(A*,B*)> ftor = obj; do_something(ftor); *ERROR*
compiler generates in both cases the following error messages cannot convert parameter 2 from 'boost::function<Signature>' to 'int (__cdecl *)(A *,B *)'
with 1> [ 1> Signature=int (A *, B *) 1> ] 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
I can't make the corresponding class B member function static due to side-effects. Any clue how to get rid of this?
Thanks in advance Mike
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users