2017-04-22 158 views
2

比方說,你有這樣的功能:如何將默認值分配給功能參數? C++

int Function(int a = 5, int b = 10){ 
... 
} 

你打電話時用更少的參數相同的函數,那麼它應該有,例如:

int var = Function(8); 

「一」變爲8,和'b'得到默認值10;

考慮到這一點,讓我們說我有收到另一個函數作爲參數調用功能3的另一個功能:

int Function3(int x, int Function2 (int)){ 
     ... 
    int m = Function2(x); 
     ... 
    return m; 
    } 

如何設置默認的功能(函數2)如果我不應該叫發送任何函數作爲Function3的參數(使用lambda函數)?

所以,如果我這樣做:

int ver = Function3(y); 

,而不是這樣的:

int ver = Function3(y,std::sin) 

我怎麼告訴它,例如,乘人數爲3,如果沒有已發送的第三個論據? (如果它必須使用該函數來處理x和y)。

+0

'std :: sin'不是'int(int)'函數。 – aschepler

回答

4

你的參數應該是一個指向函數的指針,你可以像任何其他參數一樣指定它。

int Function3(int a, int b, int (*func)(int,int) = Function2)  
{ 
    func(a,b); //call will use passed function, or Function2 if one wasn't provided 
} 
2

我做到這一點的方式是,我做的默認值是NULL,然後在我的if聲明,檢查NULL是否通過了該參數,如果是這樣開始的功能的實現,採用了意相反。

+0

爲什麼重新發明輪子並將分支引入您的程序? –

+0

@BoundaryImposition那麼,我不知道OP的問題可以得到平凡的解決,我認爲OP的難點在於他想要通過的默認值不在範圍內,或者在其他地方不可用,該呼叫正在進行中。 –

+0

調用站點的範圍與默認參數無關 –