2013-03-20 29 views
2

考慮下面的代碼C++: - 設置默認initializer_list參數大小參數X,其中X和Y是功能參數

enum class VAR_CHANGE{TYPE1, TYPE2, TYP3}; 
void cell (const std::initializer_list<double>& values, 
      const std::initializer_list<VAR_CHANGE>& change_type = [[[ !!!!!]]]) 
{ 
    // do something 
} 

我想更換[[[!!!!!]]] Y的所以默認初始化列表來

{VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE1, ....} 
大小的

values.size() 

我想這樣做,因爲通常,我想選擇枚舉類型VAR_CHANGE :: TYPE1到初始值設定項列表「值」中的所有值。 例如:

cell({1.2, 2.2, 6.7}); 

實際上是,

cell({1.2, 2.2, 6.7}, {VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE1}); 

我可以重載功能,但不知道是否有一個很好的通用的方法來做到這一點所代表的是一個函數,而不是周圍路過的大小做這個。

回答

0

您可以使用此技巧:

enum class VAR_CHANGE{TYPE1, TYPE2, TYP3}; 



void cell (const std::initializer_list<double>& values, 
      const std::initializer_list<VAR_CHANGE>& change_type = {}) 
{ 
    if(values.size() > 0 && change_type.size()==0) 
    { 
     // default 
    } 
    // do something 
} 

int main() 
{ 
    cell({12.4, 234.4}); 
    cell({12.4, 234.4}, {VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE2});; 
} 

或使其更好!

+0

爲什麼你需要奇怪的全局變量?你不能只是默認'= {}'? (我敢肯定你可以,只是測試過)http://ideone.com/7NEFvL – Xymostech 2013-03-20 15:47:47

+0

是的,你是對的! – Ajay 2013-03-20 16:22:22