I am doing C++ coding on Linux about boost::bind.
The return data type of boost::bind is a function object, which is an input argument to another function bridge_set_pound_var_func.
But, bridge_set_pound_var_func's input argument must be a function pointer. bridge_set_pound_var_func's interface cannot be changed.
The code is as follows:
#include <boost/bind.hpp>
#include <iostream>
using namespace boost;
class myA
{
 public:
     int bridge_set_pound_var_func( int (*pound_var_func)(const char *, char *, void *), void *arg ) { std::cout << "bridge_set_pound_func is called " << std::endl ; return 0; }
 };
 class myC
 {
  public:
        myA *myOA;
        int func(const char * poundVar , char * t1, void * t2);
        int myCCall() { myOA->bridge_set_pound_func( (boost::bind(&myC::func, this)), (void *)this ); return 0;}
 };
 int myC::func(const char * poundVar , char * t1, void * t2)
 {
     std::cout << "myC::func is called " << std::endl;
     return 1;
  }
 int main()
 {
      myC myCO ;
      myC *m1p = &myCO ;
      m1p->myCCall() ;
      return 0 ;
 }
 // EOF
I got compile error:
 error: no matching function for call to 
 'myA::bridge_set_pound_func(boost::_bi::bind_t<int (&)(const char*, char*, void*), boost::_mfi::dm<int ()(const char*, char*, void*), myC>, boost::_bi::list1<boost::_bi::value<myC*> > >, void*)'
  note: candidates are: int myA::bridge_set_pound_func(int (*)(const char*, char*, void*), void*)
Any help will be appreciated.
And, the interface of bridge_set_pound_var_func cannot be changed because it needs to be called by many other functions.
This is the new code that work. But, "myC::func is called" is not printed, why ?
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <iostream>
using namespace boost;
class myA
{
 public:
 int bridge_set_pound_var_func( const boost::function3<int, const char *, char *, void *> f, void *arg )  { std::cout << "bridge_set_pound_var_func is called " << std::endl ; return 0; }
};
 typedef  int (*funcPtr)(const char *, char *, void *) ;
 typedef boost::function0<int&> boostBindFuncType;
 class myC
 {
  public:
   myA *myOA;
   int func(const char * poundVar , char * t1, void * t2);
   int myCCall()
   {
     std::cout << "myCCall is called " << std::endl;
     myOA->bridge_set_pound_var_func( (boost::bind(&myC::func, this, _1, _2, _3)), (void *)this );
     return 0;
   }
 };
 int myC::func(const char * poundVar , char * t1, void * t2)
 {
  std::cout << "myC::func is called " << std::endl;
  return 1;
 }
 int main()
 {
    myC myCO ;
    myC *m1p = &myCO ;
    m1p->myCCall() ;
   return 0 ;
 }
I cannot change the interface of bridge_set_pound_var_func, which is called by many other functions. Is is possible to transform boost::bind returned function object to a function pointer?
 
     
     
     
     
    