2010-09-10 126 views
6

我有一個結構:如何將默認值分配給C++函數中的結構?

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

我想這樣定義一個函數:

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

,但我似乎無法找到一個方法來指定一個默認值來eyeposition。我怎樣才能在C++中做到這一點?

+0

這是直的C或C++? – diverscuba23 2010-09-10 20:29:08

+3

@drknexus,C++中的結構與類完全相同,只是它的成員默認是公共的,而類成員默認是私有的。而已。結構可以有構造函數,析構函數,方法,基本上每個類都有。現在如果你在談論C,那麼他們又會有所不同,所以你需要清楚你正在談論哪種語言 – Glen 2010-09-10 20:31:46

+0

這是C++,所以我編輯了問題和標籤以從問題中刪除C. – 2010-09-10 20:36:07

回答

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++是另一種語言。

+0

如果你定義了額外的構造函數,例如:'struct XYZ {XYZ(double _x, double _z):x(_x),y(42.0),z(_z)}; double CalcDisparity(XYZ objposition = XYZ(),XYZ eyeposition = XYZ(1.0,2.0),double interOccularDistance = 65.0);' – 2010-09-10 21:11:45

1
  1. 您可以編寫一個用於創建XYZ對象的工廠函數,並將該函數作爲默認值調用。

  2. 您可以使NULL爲默認值,然後在函數中檢查參數是否爲NULL,如果是,則創建默認XYZ。

  3. 創建全局XYZ對象並將其分配爲默認值。

  4. 如果您不介意使用C++而不是純C,請將XYZ設爲具有構造函數的類。

這些都是編譯和工作的方式,但有些可能不是良好的編碼實踐。

+0

如果他使用C++,那麼他可以將它作爲結構體,但給它一個構造函數 – Glen 2010-09-10 20:34:06

2

C函數參數不能有默認值(不知道約C++)。

你可以做什麼,在C,傳遞(某種程度上)無效值,檢查該無效值,並使用另一個。

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

當這個答案這個問題被標記爲'C';標籤已被刪除,因爲C不支持參數的默認值。 – 2010-09-10 20:37:05

+0

C++確實支持默認值。 – andand 2010-09-10 21:15:04

-1

你可以用我的解決方案的一部分,最後的解決方案相結合。你實現了一個實例的計數器。如果此計數器爲0,則初始化值。但計數器永遠不會達到0以外的任何東西...

也許它有幫助。

相關問題