gpt4 book ai didi

c++ - 具有许多参数的函数 - 将它们作为结构

转载 作者:太空狗 更新时间:2023-10-29 21:45:44 25 4
gpt4 key购买 nike

我正在为内部需求编写一个 API,因此易用性是首要任务之一。我想知道我是否像下面的例子那样把它推得太远了。

解决反大地测量问题的函数接受两点的地理坐标,并计算它们之间的距离以及从每个点到另一个点的方位角(角度)。

易用性优化的传统解决方案可能看起来像(请不要介意名称的长度,我知道还有改进的余地):

class Angle;
class GeoCoordinate;
...

struct InverseGeodeticOut
{
Angle forwardAzimuth;
Angle backAzimuth;
double distance;
};

InverseGeodeticOut inverseGeodetic(const GeoCoordinate &firstPoint,
const GeoCoordinate &secondPoint);
// or
void inverseGeodetic(const GeoCoordinate &firstPoint,
const GeoCoordinate &secondPoint,
InverseGeodeticOut *result);

我的问题是更进一步以节省用户一些输入的合理性:

class Angle;
class GeoCoordinate;
...

struct InverseGeodetic
{
InverseGeodetic();
InverseGeodetic(const GeoCoordinate &firstPoint,
const GeoCoordinate &secondPoint);

Angle forwardAzimuth;
Angle backAzimuth;
double distance;
};

// so the usages would be
InverseGeodeticOut inverse = inverseGeodetic(firstPoint, secondPoint);

InverseGeodeticOut inverse;
inverseGeodetic(firstPoint, secondPoint, &inverse);

InverseGeodetic inverse(firstPoint, secondPoint);

也许在这个特定示例中,差异太小以至于不值得一提,但我想知道这样的构造在一般情况下是否合适。

最佳答案

我喜欢你的第二个代码示例,尽管我发现公共(public)构造函数有点令人困惑。特别是如果有其他方法可以构建 InverseGeodetic。我宁愿使用静态工厂方法来构造它。这样你就可以给这个方法起一个更有意义的名字:

struct InverseGeodetic
{
Angle forwardAzimuth;
Angle backAzimuth;
double distance;

static InverseGeodetic FromTwoPoints(const GeoCoordinate &, const GeoCoordinate &);
};

// usage
auto inverse = InverseGeodetic::FromTwoPoints(a, b);

但那可能是我的 C# 背景渗透了。

关于c++ - 具有许多参数的函数 - 将它们作为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com