C ++ Передача указателя на нестатическую функцию-член

Привет всем :) У меня проблема с указателями функций
Мои аргументы функции обратного вызова:
1) такая функция: int (* fx) (int, int)
2) переменная int: int a
3) еще один int: int b
Ну, проблема в том, что функция, которую я хочу передать 'callback', является нестатическим членом функции :( и есть много проблем
Если кто-то умнее меня потратит время, он может посмотреть мой код :)

#include <iostream>
using namespace std;

class A{
private:
    int x;
public:
    A(int elem){
        x = elem;
    }

    static int add(int a, int b){
        return a + b;
    }

    int sub(int a, int b){
        return x - (a + b);
    }
};

void callback( int(*fx)(int, int), int a, int b)
{
    cout << "Value of the callback: " << fx(a, b) << endl;
}

int main()
{
A obj(5);

    //PASSING A POINTER TO A STATIC MEMBER FUNCTION -- WORKS!!
    // output = 'Value of the callback: 30'
    callback(A::add, 10, 20);

    //USING A POINTER TO A NON-STATIC MEMBER FUNCTION -- WORKS!!
    int(A::*function1)(int, int) = &A::sub;
    // output = 'Non static member: 3'
    cout << "Non static member: " << (obj.*function1)(1, 1) << endl;

    //PASSING A POINTER TO A NON-STATIC MEMBER FUNCTION -- aargh
    // fallita! tutto quello sotto non funziona --> usa i funtori???
    // puoi creare una classe wrapper ma non riuscirai mai a chiamare da callback
    int(A::*function2)(int, int) = &A::sub;
    int(*function3)(int, int) = obj.*function2; //[error] invalid use of non-static member function
    callback(function3, 1, 1);
}

Есть способ создать мой указатель так, как я пытался написать, например, int (* fx) (int, int) = что-то?
Я много искал, но никто не мог дать мне ответ (ну, был ответ: «НЕТ», но я все еще думаю, что могу что-то сделать)

Я также слышал о функторах, могут ли они помочь мне в этом случае?

Спасибо всем
PS: извините за мой плохой английский

EDIT1: я могу использовать что-то вроде этого:

template <class T>
void callback2( T* obj, int(T::*fx)(int, int), int a, int b)
{
    cout << "Value of the callback: " << (obj->*fx)(a, b) << endl;
}
void callback2( void* nullpointer, int(*fx)(int, int), int a, int b)
{
    cout << "Value of the callback: " << fx(a, b) << endl;
}

и в моем основном:

callback2(NULL, &mul, 5, 3); // generic function, it's like: int mul(int a, int b){return a*b;}
callback2(NULL, &A::add, 5, 3); //static member function
callback2(&obj, &A::sub, 1, 1); //non static member function

Я не полностью огорчен, потому что я не хочу передавать свой 'callback2' первый параметр (объект) ...
Вопрос, для людей, которые не поняли моего (плохого) объяснения, таков: могу ли я удалить первый параметр в моей функции callback2?
прототип будет

void callback2(int(*fx)(int, int), int a, int b)<br>

и я позвоню так:

callback2(&obj.sub, 1, 3);

Ответы на вопрос(2)

Ваш ответ на вопрос