Как я могу передать функцию-член из производного класса в качестве обратного вызова?
Ваша проблема не имеет ничего общего с тем, что B
является дочерним классом. Ваша проблема в том, что вы не связываете нестатическую функцию-член test()
с ее экземпляром.
Вы можете легко решить эту проблему, либо , используя std::bind
для возврата функтора :
c->doSomething(std::bind(&B::test, this, std::placeholders::_1));
и не забудьте #include <functional>
,
или используйте лямбда , чтобы обернуть вызов, вставив this
в лямбда захватов :
c->doSomething([this](int x){ return this->test(x); });
Примечание. Убедитесь, что параметр doSomething()
был изменен на rvalue-ссылку , чтобы он мог должным образом принять все эти параметры обратного вызова как во временных объектах, так и в других случаях. Должно выглядеть так:
template<typename T>
void doSomething(T&& completion)