Ich schreibe einige Arduino-Bibliotheken und möchte die Lesbarkeit verbessern/einige syntaktische Suggar hinzufügen.Verkettete anonyme Objekterstellung auf dem Heap
Was würde ich tun möchte, ist in einer Art und Weise Objekte auf dem Heap erstellen, die aussehen würde:
Panel panel(
Button(1).on(Click(clickfunc)),
Button(2).on(Hold(holdfunc, 1000))
);
(Knopf, Click, Halten sind alle Klassen und intern verwaltet über verkettete Listen (so sie aren ‚t konstant.))
ich habe versucht, es auf diese Weise zu schreiben, aber ich stolperte über Probleme mit Verweis auf Provisorien.
Zur Zeit kann ich:
Button button1(1), button2(2);
Click theClick(clickFunction);
Hold theHold(holdFunction, 1000);
Panel(button1.on(theClick), button2.on(theHold));
aber das ist bei weitem nicht so lesbar wie die oben und neigt dazu, fehleranfällig zu sein, weil Sie wachsam bleiben müssen und nicht setzen z.B. Klicken Sie auf eine andere Schaltfläche, die die verknüpfte Liste durchbrechen würde.
Einige stark verkürzte Ausschnitte aus den Klassen wie sind sie jetzt.
class Button {
Handler *_first;
Button(int no){...}
Button & on(Handler &handler){
handler._next = _first;
_first = &handler;
return *this;
}
void handle(int oldValue, int newValue) {
Handler *handler;
for(handler = _first; handler; handler = handler->_next){
handler->handle(oldValue, newValue);
}
}
}
class Handler {
Handler *_next;
virtual void handle(int oldValue, int newValue) = 0;
...
}
class Click : public Handler {
...
}
class Hold : public Handler {
...
}
Beachten Sie, dass dies nicht unbedingt so bleiben muss. Das Ziel besteht darin, eine Bibliothek bereitzustellen, in der der Benutzer nicht viel über seine innere Funktionsweise wissen muss, sondern über eine einfache/saubere Schnittstelle verfügt.
Hinweis: Objekte auf dem Heap sind immer anonym, da sie nie eine haben Name: Sie sind niemals Variablen. –
Können Sie die genauen Fehler hinzufügen, die Sie erhalten haben, als Sie versuchten, es zu einer Zeile zu bringen? – George
@drescherjm: vielleicht. Aber warum denkst du, es ist nicht auf dem Haufen? (Oder bin ich das Wort „Haufen“ zu Unrecht in cpp Zusammenhang mit?)) – Scheintod