2016-08-04 64 views
-1

說我有這個結構如何檢查是否提供可選的類參數?

struct float2 { 
    float x; 
    float y; 
} 

再有就是一些構造某處

struct constructable { 
    constructable(float2 opt = float2()) { 
     if (opt == float2()) { //doesn't work 
      //fill out opt with default values 
     } 
    } 
} 

如何檢查東西是否被通過選擇通過呢?

+2

有兩個構造函數:施工的( )和可構造的(float/* not optionale * /) –

+1

'opt == float2()'你需要像'bool operator ==(const float2&m,const float2&n){return m.x == n.x && m.y == n.y; }'讓它工作。 – DimChtz

回答

1

而不是

struct constructable { 
    constructable(float2 opt = float2()) { 
     if (opt == float2()) { //doesn't work 
      //fill out opt with default values 
     } 
    } 
}; 

如果所需的默認值是在編譯時已知,那麼就去做

struct constructable { 
    constructable(float2 opt = {2.72, 3.14}) { 
    } 
}; 

否則使用兩個構造函數:

struct constructable { 
    constructable() { 
     // Use whatever computed values 
    } 
    constructable(float2 o) { 
     // Use o 
    } 
};