С++ вызов переменной класса из статической функции обратного вызова

Вопрос такой: нужно получить доступ к объекту класса Ui::window в функции callback_function(). Есть информация, что можно в качестве аргумента функции callback_function передать ей (void*)this. Но я не знаю как это сделать. Такую конструкцию (void*)this он не принимает. Прошу помощи и выход из сложившейся ситуации.

При выполнении программы:
1) Вызывается функция send_file() класса A;
2) В этой функции вызывается системная функция curl_easy_setopt()
в которой последним аргументом идет указатель на функцию обратного вызова (callback_function)
3) Вызывается сама callback_function (В ней находятся некие данные , которые надо сразу отобразить в Ui::window при выполнении)
4) Никаких псевдонимов в приведенном коде типа: typedef void (*str)(char *c) нету. Только определение в классе A;

class A
{
     static void callback_function(void* ptr, size_t size, size_t nmemb, void* stream);
private:
     Ui::Window ui;
}

void A::send_file() { curl_easy_setopt(curl, CURLOPT_READFUNCTION, callback_function); } //curl_easy_setopt системная функция 


void A::callback_function(void* ptr, size_t size, size_t nmemb, void* stream)         // функция обратного вызова в стиле языка "С"
{
//Как в этом месте получить доступ к не статическому объекту Ui::window в класса A?
}

Ответы (1 шт):

Автор решения: Александр
class A
{
public:
    static void callback_function(void* p,int a,char b)
    {
        A* self = static_cast<A*>(p);
        //self->ui;
    }
private:
    Ui::Window ui;
};


int main(int argc, char *argv[])
{
    A obj;

    A::callback_function(&obj, 1, 'a');

    return 0;
}

Дополнено, так как вопрос уточнен:

class A
{
public:
    static void callback_function(void *ptr, size_t size, size_t nmemb, void *userdata)
    {
        A* self = static_cast<A*>(userdata);
        //self->ui;
    }

    void send_file()
    {
        curl_easy_setopt(curl, CURLOPT_READFUNCTION, callback_function);
        curl_easy_setopt(curl, CURLOPT_READDATA, (void *)this);
    }

private:
    Ui::Window ui;
    ...
};


int main(int argc, char *argv[])
{
    A obj;
    obj.send_file();

    return 0;
}

Код не компилировал, но работать должно примерно так. Ключевой момент, что значение в userdata необходимо задавать с помощью:

curl_easy_setopt(curl, CURLOPT_READDATA, (void *)this);
→ Ссылка