我有一个类(或函数),它接受一组对象,比如点,我需要几种不同的方法来创建它们。此外,我需要测试接受它们的类,所以我想为“点集合创建者”类创建一个接口或基类。
我知道在 C++ 中接受对象集合到函数中的惯用方法是传递两个模板化迭代器。像这样的东西:
template <typename Iterator>
double doSomething(Iterator first, Iterator last);
但是返回一个集合怎么样?如何声明一组返回集合的类,以便我可以将它传递给这样的函数?
我应该只返回集合(向量或其他),然后让它的开始和结束迭代器传递它们吗?或者我应该模仿容器的界面?(这在以后测试具体类和使用 Google Mock 的 ASSERT_THAT 和 ElementsAre 时可能很有用)。
更新。我正在添加更多信息
正如我所说,我需要处理一些要点。为简单起见,假设我需要获取一系列点,对它们进行一些计算,然后返回一个值(例如,连续点之间的平均距离):
double ProcessPoints(/*Take points somehow*/);
或者可能:
class PointProcessor
{
public:
PointProcessor(/*Take points somehow*/);
double Run();
//...
}
现在,我需要几种方法来创建一系列点,例如一系列 N 个随机点、一系列线段的交点、用于测试的假...所以我认为它们应该有一个公共接口或基类:
class PointsGenerator { /*...*/ };
class RandomPoints : public PointsGenerator{ /*...*/ };
class IntersectionsBetweenSegments : public PointsGenerator{ /*...*/ };
class FakePointsGenerator : public PointsGenerator{ /*...*/ };
//...
那么 PointsGenerator 是否应该只返回一个向量,它是否应该像容器一样提供开始和结束功能,这些选项都没有......?也许我做错了?