Я все еще нахожусь в C ++ и столкнулся с проблемой.У меня есть класс, содержащий экземпляр экземпляра другого класса (не может наследовать от), который включает в себя обратный вызов.Я хотел бы зарегистрировать этот обратный вызов в родительском классе, но у меня возникли трудности.
После некоторого изучения я понимаю метод! = Function, поскольку метод экземпляра неявно ожидает экземпляр самого себя (лучший способ, которым я могу описатьэто!) и что std::bind
был вариант, но я не могу заставить это работать, когда подпись не <void(void)>
.
Я также читал о реализации как интерфейс, похожий на делегат (Я родом из Swift), который также был привлекательным.
Вот базовая версия того, чего я пытаюсь достичь:
class ChildClass
{
public:
std::function<int(int)> callback;
};
class MainClass
{
public:
ChildClass childClass;
MainClass()
{
this->childClass.callback = this->square;
}
private:
int square(int i)
{
return i * i;
}
};
Я понимаю, что несовпадение типов вызывает ошибку,но я понятия не имею, как заставить их играть вместе.