У меня есть приложение 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;