I've been trying to create a callback system for a while, but with my poor C++ knowledge, it's been tricky. I've finally created a simple, albeit messy, system for creating callback for a class, which will allow me to separate backend and output completely, yay!
Also note this was made and written on Windows XP, I'll try it on Fedora later.
main.cpp
#include "class.cpp"
#include <stdio.h>
// int _aset(int value) __attribute__ (cdecl) // GNU C++
int __cdecl _aset(int value) // Microsoft Visual Studio 6
{
printf("MyClass::a set to %d\n", value);
return 0;
}
// int _bset(char *value) __attribute__ (cdecl) // GNU C++
int __cdecl _bset(char *value) // Microsoft Visual Studio 6
{
printf("MyClass::b set to %s\n", value);
return 0;
}
int main(int argc, char **argv)
{
MyClass cls;
cls.set_aset_callback(&_aset);
cls.set_bset_callback(&_bset);
cls.set_a(42);
cls.set_b("forty two");
return 0;
}
class.cppclass MyClass
{
protected:
int a;
char *b;
public:
void set_aset_callback(int (*callptr)(int)) { this->aset_callback_addr = callptr; };
void set_bset_callback(int (*callptr)(char *)) { this->bset_callback_addr = callptr; };
void set_a(int val)
{
this->a = val;
(*this->aset_callback_addr)(this->a);
};
void set_b(char *val)
{
this->b = val;
(*this->bset_callback_addr)(this->b);
};
private:
int (*aset_callback_addr)(int);
int (*bset_callback_addr)(char *);
};