Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为C+中的结构指定默认值+;功能?_C++_Function_Struct - Fatal编程技术网

C++ 如何为C+中的结构指定默认值+;功能?

C++ 如何为C+中的结构指定默认值+;功能?,c++,function,struct,C++,Function,Struct,我有一个结构: typedef struct { double x,y,z; } XYZ; 我想定义这样一个函数: double CalcDisparity(XYZ objposition, XYZ eyeposition, double InterOccularDistance = 65.0) double CalcDisparity( XYZ objposition = XYZ(),

我有一个结构:

typedef struct {
   double x,y,z;
} XYZ;
我想定义这样一个函数:

double CalcDisparity(XYZ objposition, 
                     XYZ eyeposition, 
                     double InterOccularDistance = 65.0)
double CalcDisparity( XYZ objposition = XYZ(),
                      XYZ eyeposition = XYZ(),
                      double interOccularDistance = 65.0 )
但我似乎找不到一种方法来为眼位置指定默认值。如何在C++中实现这一点?

< p> <

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 eyeposition, 
                     double InterOccularDistance = 65.0)
double CalcDisparity( XYZ objposition = XYZ(),
                      XYZ eyeposition = XYZ(),
                      double interOccularDistance = 65.0 )
但有一个小技巧:不能只为第一个和第三个参数设置默认值。还有一件事:C是一种语言,C++是另一种语言。
  • 您可以编写一个用于创建XYZ对象的工厂函数,并将该函数作为默认值调用

  • 可以将NULL设为默认值,然后如果参数为NULL,则检入函数,如果参数为NULL,则创建默认XYZ

  • 创建全局XYZ对象并将其指定为默认值

  • <> >如果你不介意用C++来代替纯C,那么用一个构造函数来做XYZ类。


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

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

    C
    中,您可以做的是传递一个(不知何故)无效值,检查该无效值并使用另一个值

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

    您可以将最后一个解决方案与我的解决方案的一部分结合起来。您实现了一个实例计数器。如果此计数器为0,则初始化该值。但是计数器只能到达0


    也许有帮助

    @ DrKNEXUS,C++中的结构与一个类完全相同,除了默认情况下成员是公共的,而默认情况下类成员是私有的。就这样。结构可以有构造函数、析构函数、方法,基本上一个类拥有的一切。现在,如果你在谈论C,那么它们又不同了,所以你需要弄清楚你在谈论C++中的哪种语言,所以我编辑了这个问题和标签来删除问题中的C。不要混淆C和C++,它们非常不同。@ diVistCuB23:我认为这只能是C++,因为C没有默认参数。C++是抱歉的。坦率地说,我在编程中遇到问题,所以语言之间的区别就消失了。如果他使用C++,那么他可以把它作为一个结构来做,但是给它一个构造,当给出这个答案时,这个问题被标记为“C”;标签已经被删除,因为C不支持参数的默认值。C++支持默认值。如果定义了其他构造函数,可以(例如:<代码>结构XYZ {XYZ(double x,double z)):x(x x),y(42),z(z z)};双视距(XYZ-objposition=XYZ(),XYZ-eyeposition=XYZ(1.0,2.0),双视距=65.0)