2011-05-31 13 views
6

Estoy teniendo algunos problemas para entender cómo hacer frente a la ambigüedad de constructores en D.ambiguo Struct constructores en D

struct mydta { 
    int a = 2; 
    int b = 3; 

    this(int c) { 
     a = c/2; 
     b = c * 2; 
    } 
    this(float c) { 
     a = cast(int) c/2; 
     b = cast(int) c * 2; 
    } 

    static mydta afvec = mydta(4.3); 
    static mydta aivec = mydta(5); 
} 
  • afvec tiene valores de los datos 2 y 8.
  • aivec tiene los datos valores de 5 y 3.

Esto significa que afvec llamados this(float c) como se esperaba de la sintaxis.

Sin embargo, aivec ha cumplido una misión similar a aivec.a = 5.

He extrapolado en esto para encontrar que el siguiente es legal en el antedicho: aivec = mydta(5, 4); dando aivec los valores 5 y 4 respectivamente.

Alguna idea de cómo pasar por alto esta inicialización implícita para que pueda acceder a mi constructor: this(int c)?

+0

Un flotante también podría ser 5 por lo que no sabe qué constructor usar. Prueba agregar un cast a uno de ellos. – Kevin

+0

Ese no es el problema, el problema es que si uso un int, llama a una inicialización implícita en lugar del constructor 'this (int c)' que quiero que llame. – dcousens

Respuesta

5

Eso me parece un error.

Si hace esto:

mydta foo = mydta(5); 
writeln(foo.b); 

Se obtiene 10 como se esperaba. Hubo una gran cantidad de cambios en CTFE para la versión 2.053, por lo que se pudo haber roto algo como resultado. Por favor, publícalo como un error en el D issue tracking system.

+0

Su derecho, solo ocurre para la variable estática, y funciona en otras situaciones. Gracias. – dcousens