我的工作是完全重写一个用于 GIS 矢量数据处理的旧库。主类封装了一组建筑轮廓,并提供了不同的方法来检查数据的一致性。这些检查函数有一个可选参数,允许执行某些过程。
例如:
std::vector<Point> checkIntersections(int process_mode = 0);
此方法测试某些建筑物轮廓是否相交,并返回相交点。但是如果您传递一个非空参数,该方法将修改轮廓以删除交集。
我认为这很糟糕(在调用站点,不熟悉代码库的读者会假设名为 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);
}
但这迫使我打破 const 的正确性,因为 workerIntersections 是一种非常量方法。
如何分离检查和处理,避免代码重复并保持 const 正确性?