2015-05-25 77 views
2

我真的試圖找到編譯沒有錯誤,而且休耕事情的方法:功能的默認值的一個局部參數

template <class A> 
void f(A a,A b=a){ 
//do something 
} 

但是,當我打電話像f<int>(3)此功能的編譯器告訴我,當地變量a可能不會出現在上下文中。 我想,這是因爲編譯器無法知道是否值將被分配到形式參數a,以便它可以初始化形式參數ba值。

是否有任何等效方式/模式,我可以實現這樣的功能?

回答

8

您可以提供調用雙參數版本的重載:

template <class A> 
void f(A a, A b){ 
    //do something 
} 

template <class A> 
void f(A a){ 
    f(a, a); 
} 
+0

非常感謝!我想我也可以用一個構造函數做同樣的事情嗎? – Iero

+0

是的,應該像這個例子一樣工作。 – juanchopanza

+0

Tnx ...這節省了我很多時間....如果我找不到解決方案,我必須再次寫所有的代碼。 :d – Iero