class ClassB;
class ClassA
{
private:
void(ClassB::*clickFunc)();
ClassB* parent = nullptr;
public:
ClassA() = delete;
ClassA(ClassB* parent)
: parent(parent)
{
}
void SetCallback(void(ClassB::*clickFunc)())
{
this->clickFunc = clickFunc;
}
void ExecuteCallback()
{
if (parent)
(parent->*clickFunc)();
}
};
class ClassB
{
private:
const char* up = "UP";
const char* down = "DOWN";
public:
ClassA button1;
ClassA button2;
ClassB()
: button1{ this }, button2{ this }
{
button1.SetCallback(&ClassB::UpClick);
button2.SetCallback(&ClassB::DownClick);
}
void UpClick()
{
Serial.println(this->up);
}
void DownClick()
{
Serial.println(this->down);
}
};
void setup()
{
Serial.begin(115200);
ClassB b;
b.button1.ExecuteCallback();
b.button2.ExecuteCallback();
}
void loop()
{
}