5

Estoy tratando de hacer una clase donde el usuario pueda modificar las variables miembro para cambiar los argumentos predeterminados de sus funciones miembro.¿Hay alguna manera de tener argumentos dinámicos por defecto?

class Class 
{ 
    public int Member; 

    public void Method(int Argument = Member) 
    { 
     // This compiles fine, until I try to actually use 
     // the method elsewhere in code! 

     // "Error: need 'this' to access member Member" 
    } 
} 

Mi solución hasta ahora ha sido utilizar números mágicos, lo que obviamente no es ideal.

public void Method(int Argument = 123) 
{ 
    int RealArgument; 

    if (Argument == 123) RealArgument = Member; 
    else RealArgument = Argument; 
} 

¿Hay una manera mejor, o estoy atascado con esta solución "hack"?

Respuesta

7

Sí, olvide el argumento predeterminado.

class Class 
{ 
    public int Member; 

    public void Method(int Argument) 
    { 
     ... 
    } 

    public void Method() 
    { 
     Method(Member); 
    } 
} 

No es necesario trucos aquí.

+0

Esto puede ser poco práctico para muchos argumentos, pero mixins puede ayudar a generar el código automáticamente. – Maxpm

+0

Usar plantillas variadas y nombrar cuidadosamente puede permitirle obtener ese efecto solo con la función base y una plantilla de envoltura única. – BCS

Cuestiones relacionadas