私の仕事は、GIS ベクター データ処理用の古いライブラリを完全に書き直すことです。メイン クラスは建物のアウトラインのコレクションをカプセル化し、データの一貫性をチェックするためのさまざまな方法を提供します。これらのチェック関数には、何らかのプロセスを実行できるオプションのパラメーターがあります。
例えば:
std::vector<Point> checkIntersections(int process_mode = 0);
このメソッドは、いくつかの建物のアウトラインが交差しているかどうかをテストし、交差点を返します。ただし、null 以外の引数を渡すと、メソッドはアウトラインを変更して交差を削除します。
私はそれがかなり悪いと思います(呼び出しサイトでは、コードベースに精通していない読者は、checkSomething と呼ばれるメソッドがチェックを実行するだけでデータを変更しないと想定します)、これを変更したいと思います。また、チェックとプロセスの方法はほとんど同じであるため、コードの重複を避けたいと考えています。
だから私はこのようなことを考えていました:
// a private worker
std::vector<Point> workerIntersections(int process_mode = 0)
{
// it's the equivalent of the current checkIntersections, it may perform
// a process depending on process_mode
}
// public interfaces for check and process
std::vector<Point> checkIntersections() /* const */
{
workerIntersections(0);
}
std::vector<Point> processIntersections(int process_mode /*I have different process modes*/)
{
workerIntersections(process_mode);
}
しかし、workerIntersections は非 const メソッドであるため、const の正確性を破ることを余儀なくされます。
チェックとプロセスを分離して、コードの重複を回避し、const-correctness を維持するにはどうすればよいですか?