Как сделать так, чтобы разделяемая lib вызывала обратный вызов в приложении? - PullRequest
1 голос
/ 03 октября 2019

У меня есть приложение C ++, которое связывается с разделяемой библиотекой C ++, которую я также делаю (API). Я хотел бы, чтобы функция (в обратном вызове разделяемой библиотеки) вызывала функцию обратного вызова в приложении и передавала в качестве параметра класс.

Может ли кто-нибудь помочь с тем, как это можно сделать? Я видел другие вопросы, подобные этому, когда я использовал обратные вызовы C, но когда я начал передавать классы в обратном вызове, все вышло из строя.

Обновления: Я попытался уточнить некоторые извопросы. Надеюсь, это поможет.

// callback.h
using my_callback = void (*)(std::shared_ptr<std::vector<int>>);


// main.cpp
void app_callback(std::shared_ptr<std::vector<int>> vec) { ... }

int main() {
    // ...

    my_callback callback = &app_callback;

    LibClass libProcess = std::make_shared<MyClass>();
    libProcess->set_callback(cb);
    (*libProcess)(); 

    // ...
}

// lib.cpp
int LibClass::operator()() {   
    thread = std::thread(&LibClass::run_task, this);
    thread.join();                          
}

void LibClass::set_callback(my_callback cb) {
   callback = cb;
}

void LibClass::run_task() {
    while (true) {
        auto sp = std::make_shared<std::vector<int>>();
        // ...

        callback(sp);

        sleep(1);
    }
}

И я не уверен, что это лучший способ сделать это. Хотя приведенное выше приводит к ошибке вроде:

error: invalid conversion from ‘void (*)()’ to ‘my_callback {aka void (*)(std::shared_ptr<std::vector<int>> >)}’ [-fpermissive]                                                                             
  my_callback callback = &app_callback;    
...