Assign C++ instance method to a global-function-pointer ?
- by umanga
Greetings,
My project structure is as follows:
\- base  (C static library)
     callbacks.h
     callbacks.c
     paint_node.c
     . 
     .
     * libBase.a
\-app (C++ application)
     main.cpp
In C library 'base' , I have declared global-function-pointer as:
in singleheader file
callbacks.h
#ifndef CALLBACKS_H_
#define CALLBACKS_H_
extern void (*putPixelCallBack)();
extern void (*putImageCallBack)();
#endif /* CALLBACKS_H_ */
in single C file they are initialized as
callbacks.c
#include "callbacks.h"
void (*putPixelCallBack)();
void (*putImageCallBack)();
Other C files access this callback-functions as:
paint_node.c
#include "callbacks.h"
void paint_node(node *node,int index){
  //Call callbackfunction
  .
  .
  putPixelCallBack(node->x,node->y,index);
}
I compile these C files and generate a static library 'libBase.a'
Then in C++ application,
I want to assign C++ instance method to this global function-pointer:
I did something like follows :
in Sacm.cpp file
#include "Sacm.h"
extern void (*putPixelCallBack)();
extern void (*putImageCallBack)();
void Sacm::doDetection()
{
  putPixelCallBack=(void(*)())&paintPixel;
  //call somefunctions in 'libBase' C library
}
void Sacm::paintPixel(int x,int y,int index)
{
 qpainter.begin(this);
 qpainter.drawPoint(x,y);
 qpainter.end();
}
But when compiling it gives the error:
  sacmtest.cpp: In member function ‘void
  Sacm::doDetection()’:
  sacmtest.cpp:113: error: ISO C++
  forbids taking the address of an
  unqualified or parenthesized
  non-static member function to form a
  pointer to member function.  Say
  ‘&Sacm::paintPixel’ sacmtest.cpp:113:
  error: converting from ‘void
  (Sacm::)(int, int, int)’ to ‘void
  ()()’
Any tips?