2012-01-04 48 views
1

假設我有下面的函數,它產生的值是通過在代碼中的許多其它功能所需:將函數調用作爲默認參數 - 可以在佔用空間中使用其他參數嗎?

float mean(foo param1, bar param2); 

我的另一個功能是這樣的:

float foobar(foo param1, bar param2, float meanValue); 

我想要做的就是以下內容:

float foobar(foo param1, bar param2, float meanValue = mean(param1, param2)); 

雖然傳遞函數的默認參數是合法的,編譯器(VS2008)抱怨說,param1param2沒有聲明 - 因爲參數會從meanValue開始從右到左推入堆棧。當然,我不能顛倒參數的順序,因爲在這種情況下,我將無法爲第一個參數指定默認值。

我可以傳遞一些像-10000這樣的值來表示告訴自己調用mean()函數;或者我可以重載每個函數(並且有超過10個超載),但那不是很整齊。我認爲你可以將一個函數作爲默認參數調用真的很酷,我想知道是否有一個簡單的方法來完成我想要做的事情。

回答

3

C++標準沒有規定參數在哪些順序中被推送到堆棧,或者它們是否被推入,或者在架構上是否存在堆棧。

你不給,爲什麼你有這麼多這樣的功能,以及它們是如何不同,但也許下面將有助於減少重載的數量多的信息:

template< typename T1, typename T2 > 
float foobar(T1 param1, T2 param2) 
{ 
    return foobar(param1, param2, mean(param1, param2)); 
} 

請注意,您可以使結果類型和函數調用,以及mean()函數,所有模板參數,如果需要的話。

相關問題