5

Sto provando a creare una classe in cui l'utente può modificare le variabili membro per modificare gli argomenti predefiniti delle sue funzioni membro.C'è un modo per avere argomenti predefiniti dinamici?

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" 
    } 
} 

La mia soluzione finora è stata quella di utilizzare numeri magici, che ovviamente non è l'ideale.

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

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

C'è un modo migliore, o sono bloccato con questa soluzione "hack"?

risposta

7

Sì, dimenticare l'argomento predefinito.

class Class 
{ 
    public int Member; 

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

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

Non c'è bisogno di trucchi qui.

+0

Questo può essere poco pratico per molti argomenti, ma i mixin possono aiutare a generare automaticamente il codice. – Maxpm

+0

L'uso di modelli variadici e un'attenta denominazione può consentire di ottenere quell'effetto solo con la funzione di base e un modello di wrapper singolo. – BCS

Problemi correlati