c – 如何从函数中返回多个类型?

背景故事.

在Excel中的VBA中,我创建了一个函数来计算两条线(向量)之间的最短距离.此函数返回明显的交叉点以及它们之间的实际距离.

为了完成这项工作,我最终传出一个数组,然后整理出事后发生的事情.它有效,但阅读和使用起来很笨拙.

在C中,我做了一个类似的函数,返回有问题的点.

struct point3D
{ 
double x,y,z;
}
point3D findIntersect(const vec3& vector1, const vec3& vector2)
{
// Do stuff...
return point;
}

问题:
我也希望返回长度,因为它使用了原始计算的一部分.但是大多数时候我只想要点.

我看过的可能的解决方案是:

为距离写一个单独的函数.当我想要它们时,需要做很多额外的工作.

>为此功能创建自定义结构.似乎有点矫枉过正.
>像VBA函数那样返回一个数组.结果代码不是很直观,使用时需要小心.
>使用可选参数作为对变量的引用来存储距离.不行.编译器不允许我更改可选参数.
>使用像这个函数的参数列表(const argin1,const argin2,argout&,argout2&).唉!将要求用户始终期望每个变量.

我已经看到了对的示例,但它们看起来必须是相同的数据类型.我本质上想要返回一个point3D和一个double.

有没有人有更优雅的解决方案从函数返回多个值?

最佳答案 由于您不想定义自定义结构或类,我假设您希望返回值仅为point.因此,我建议您使用可选的指针参数,它的默认值为NULL,如果它不是NULL,则将距离存储在它指向的变量中.

point3D findIntersect(const vec3 &v1, const vec3 &v2, double *dist = NULL) {
  // ...
  if (dist) {
    // find the distance and store in *dist
  }
  return ... ;
}
点赞