如何为C ++函数中的结构指定默认值?

时间:2010-09-10 20:24:25

标签: c++ function struct

我有一个结构:

typedef struct {
   double x,y,z;
} XYZ;

我想定义一个这样的函数:

double CalcDisparity(XYZ objposition, 
                     XYZ eyeposition, 
                     double InterOccularDistance = 65.0)

但我似乎找不到为眼睛分配默认值的方法。我怎么能用C ++做到这一点?

4 个答案:

答案 0 :(得分:11)

这是

struct XYZ{
    XYZ( double _x, double _y, double _z ) : x(_x), y(_y),z(_z){}
    XYZ() : x(0.0), y(42.0), z(0.0){}

    double x, y, z;
};

所以我现在有一个默认的构造函数。然后你这样称呼它:

double CalcDisparity( XYZ objposition = XYZ(),
                      XYZ eyeposition = XYZ(),
                      double interOccularDistance = 65.0 )

但是有一个小技巧:你不能只为第一和第三个参数做一个默认值。还有一件事:C是一种语言,C ++是另一种语言。

答案 1 :(得分:2)

C中,函数参数不能有默认值(不知道C++)。

您可以在C中执行的操作是传递(某种程度上)无效值,检查该无效值并使用其他值。

int foo(int n) {
  if (n == -1) { /* -1 is invalid */
    n = 42;      /* use 42 instead */
  }
  /* ... */
}

答案 2 :(得分:1)

  1. 您可以编写用于创建XYZ对象的工厂函数,并将该函数作为默认值调用。

  2. 您可以将NULL设为默认值,然后在参数为NULL时检入函数,如果是,则创建默认XYZ。

  3. 创建一个全局XYZ对象并将其指定为默认值。

  4. 如果您不介意使用C ++而不是纯C,请使XYZ成为带构造函数的类。

  5. 这些都是编译和工作的方式,但有些可能不是很好的编码实践。

答案 3 :(得分:-1)

您可以将最后一个解决方案与我的解决方案的一部分结合起来。您实现了一个实例计数器。如果此计数器为0,则初始化值。但是计数器永远不会超过0 ......

也许有帮助。