Я новичок в функциональной библиотеке. Я хочу передать лямбду в функцию, которая в конечном итоге преобразует это std::function<void()>
в пустой указатель. Мне нужно передать эту функцию void в C API. Эта лямбда также принимает текущий объект класса в качестве захвата. Вот фрагмент кода. Любая помощь приветствуется:
class Animal{
public:
Animal(std::function<void()> func){}
// call C API that takes in void(*)()
call_c_api(func); // Somehow convert func to void *
};
class Cat{
private:
std::string m_name;
Animal m_animal;
public:
static StaticCatFunc(Cat*instance){
std::cout << "Name: " << instance->m_name <<"\n";
}
Cat(){
m_animal = new Animal([this](){StaticCatFunc(this);})
}
};
Мне нужно для достижения вышеуказанной функциональности. Это не вопрос наследства. Мне нужно как-то конвертировать лямбда с захватом в пустой указатель. Я читал, что лямбды с захватом не могут быть преобразованы в необработанные указатели. Есть ли способ достичь этой функциональности? Любая помощь приветствуется.
=========== Обновление =========
c API выглядит следующим образом:
call_c_api(void (*handler)());