我正在编写一个近似函数,它将两个不同的公差值作为参数:
bool Approximate(vector<PointC*>* pOutput, LineC input, double horizontalTolerance, double verticalTolerance)
如果未设置verticalTolerance,我希望函数设置verticalTolerance = horizontalTolerance。所以,我想完成类似的事情:
bool Approximate(vector<PointC*>* pOutput, LineC input, double horizontalTolerance, double verticalTolerance=horizontalTolerance)
我知道这是不可能的,因为local variables are not allowed as default parameters。所以我的问题是,设计这个功能的最佳方法是什么?
我想到的选项是:
不要使用默认参数,并让用户明确设置两个容差。
将verticalTolerance的默认值设置为负值,如果为负,则将其重置为horizontalTolerance:
bool Approximate(vector<PointC*>* pOutput, LineC input, double horizontalTolerance, double verticalTolerance=-1)
{
if (verticalTolerance < 0)
{
verticalTolerance = horizontalTolerance;
}
// Rest of function
}
在我看来,第一点不是解决方案,而是旁路,第二点不是最简单的解决方案。
答案 0 :(得分:7)
或者您可以使用重载:
bool Approximate(vector<PointC*>* pOutput, LineC input,
double horizontalTolerance, double verticalTolerance)
{
//whatever
}
bool Approximate(vector<PointC*>* pOutput, LineC input,
double tolerance)
{
return Approximate(pOutput, input, tolerance, tolerance);
}
这完全模仿了你想要达到的目标。