2016-08-04 12 views
-1

sagen, dass ich diese StrukturWie überprüft man, ob optionale Klassenargumente angegeben sind oder nicht?

struct float2 { 
    float x; 
    float y; 
} 

und dann gibt es einige Konstruktor irgendwo

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

haben Wie kann ich überprüfen, ob etwas durch opt übergeben wurde?

+2

Haben zwei Konstruktoren: konstruierbar () und konstruierbar (float/* not optionale * /) –

+1

'opt == float2()' Du brauchst so etwas wie 'bool operator == (const float2 & m, const float2 & n) {zurück m.x == n.x && m.y == n.y; } 'damit es funktioniert. – DimChtz

Antwort

1

Statt

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

, wenn die gewünschten Standardwerte zum Zeitpunkt der Kompilierung bekannt sind, dann tun nur

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

Sonst zwei Konstrukteure verwenden:

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