私はarduinoライブラリをいくつか書いていますが、読みやすさを向上させたい、構文上のsuggarを追加したいと思います。ヒープ上の匿名オブジェクトの連鎖
私は何をしたいのは次のようになりますように、ヒープ上のオブジェクトを作成します
Panel panel(
Button(1).on(Click(clickfunc)),
Button(2).on(Hold(holdfunc, 1000))
);
(ボタン、クリック、ホールドは、すべてのクラスであり、内部的にリンクされたリストで管理(ので、彼らは上がりません)定数)。
私はこのように書こうとしましたが、私は一時的なものへの参照で問題を見つけました。
現在、私は使用することができます。
Button button1(1), button2(2);
Click theClick(clickFunction);
Hold theHold(holdFunction, 1000);
Panel(button1.on(theClick), button2.on(theHold));
しかし、あなたが警戒しなければならないと、例えば入れていないので、これは上記とほぼ同じくらい読めないとエラーが発生しやすい傾向にあるがリンクされたリストを壊す別のボタンをクリックします。
今のように、クラスの一部を大幅に短縮した抜粋です。
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 {
...
}
これは必ずしもこのままである必要はありません。目標は、ユーザーが内部作業について多く知っている必要はなく、シンプルでクリーンなインターフェイスを備えたライブラリを提供することです。
ノートでのライブの例です:彼らが持っていることはありませんので、ヒープ上のオブジェクトは、常に匿名です名前:決して変数ではありません。 –
1行にしようとしたときに正確なエラーを追加できますか? – George
@drescherjm:多分。しかし、なぜそれがヒープ上にないと思いますか? (あるいは、私はcppの文脈で "Heap"という言葉を間違って使っていますか?) – Scheintod