2013-04-22 54 views
2

在變長參數函數中,'...'必須放在最後。並且啓用默認值的參數也必須是最後一個。在C++中將默認值參數放置在變長函數中的位置?

那麼,如何在同一個功能需要?

現在我有一個日誌實用程序: void MyPrint(int32_t logLevel,const char * format,...),用於根據'logLevel'打印日誌。

但是,有時我希望它可以用作: MyPrint(「Log test number%d」,number),不需要'logLevel'。

問題: Default arguments and variadic functions 沒有幫助。

+1

可能重複http://stackoverflow.com/ questions/4130613/default-arguments-and-variadic-functions) – TemplateRex 2013-04-22 09:16:02

+0

對於你爲什麼需要變長參數列表和默認值,你應該能夠想出一個使用其中一個或另一個的解決方案。 – krsteeve 2013-04-22 17:31:10

+1

你想用MyPrint()做什麼的具體解決方案是有兩個重載。 – 2013-05-02 06:46:45

回答

1

在特定情況下,你可能只想做MyPrint的兩個版本,如:

MyPrint(const char *format, ...) 
{ 
    _logLevel = 1; 
    // stuff 
} 
MyPrint(int32_t logLevel, const char *format, ...) 
{ 
    _logLevel = logLevel; 
    //stuff 
} 

在另一方面Named Parameter Idiom確實會提供一種替代方案:

class Abc 
{ 
public: 
MyPrint(const char *format, ...) 
{ 
    _logLevel = 1; 
    // stuff 
} 
Abc &setLogLevel(int32_t logLevel) 
{ 
    _logLevel = logLevel; 
} 

// stuff 

};

所以,你可以調用MyPrint()這樣的:

MyPrint("blah,blah", 123); 

或像這樣:

MyPrint("blah,blah", 123).setLogLevel(5); 
的[默認參數和參數可變型函數(
相關問題