こんにちは、高木です。

前回やり残してしまったgridderのサブコマンドを今回は実装してしまいましょう。残っているのは次の4つです。

  • bbox
  • location
  • remove
  • size

まずはbboxからです。

std::spanを返す最初の形式はslavesメンバー関数とほとんど同じです。下請けメンバー関数を作ってまとめられるので、今回は安直なコピペで対応したいと思います。

次はlocationです。

結果は整数値になるので、tcl::obj型ではなくint型にしてもよかったのですが、エラー発生時に例外を送出するしかなくなるので、いったんtcl::obj型を返すことにしました。エラー発生時は空の値を返します。

次はremoveです。

initalizer_listで渡すものだけでもいいのですが、単独のウィジェットを指定するケースが結構あると思うので、専用のメンバー関数を用意しました。

最後はsizeです。sizeメンバー関数が返す値のために、次のような構造体を用意することにします。

この構造体は汎用的なものですので、今回に限らずいろいろ使っていけると思います。

準備ができたところで実際のsizeメンバー関数を実装していきます。

たったこれだけのことなのにちょっと煩雑になってしまいました。まだまだ改善の余地がありそうです。

なかなか完璧にはほど遠いですが、これでgridderクラスが一通り完成しました。