5

我想做一個類,用戶可以修改成員變量來更改其成員函數的默認參數。有沒有辦法讓動態默認參數?

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

我的解決方法到目前爲止一直使用幻數,這顯然是不理想的。

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

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

有沒有更好的辦法,還是我堅持這個「黑客」的解決方案?

回答

7

是的,忘記默認參數。

class Class 
{ 
    public int Member; 

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

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

這裏不需要欺騙。

+0

這對許多參數來說可能不切實際,但mixin可以幫助自動生成代碼。 – Maxpm

+0

使用可變參數模板和小心的命名可能允許您僅使用基本函數和單個包裝器模板來獲得該效果。 – BCS

相關問題