我有一个结构:
typedef struct {
double x,y,z;
} XYZ;
我想定义一个这样的函数:
double CalcDisparity(XYZ objposition,
XYZ eyeposition,
double InterOccularDistance = 65.0)
但我似乎找不到为眼睛分配默认值的方法。我怎么能用C ++做到这一点?
答案 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)
您可以编写用于创建XYZ对象的工厂函数,并将该函数作为默认值调用。
您可以将NULL设为默认值,然后在参数为NULL时检入函数,如果是,则创建默认XYZ。
创建一个全局XYZ对象并将其指定为默认值。
如果您不介意使用C ++而不是纯C,请使XYZ成为带构造函数的类。
这些都是编译和工作的方式,但有些可能不是很好的编码实践。
答案 3 :(得分:-1)
您可以将最后一个解决方案与我的解决方案的一部分结合起来。您实现了一个实例计数器。如果此计数器为0,则初始化值。但是计数器永远不会超过0 ......
也许有帮助。