2010-04-29 86 views
1

是否有可能具有可變參數和沒有命名參數的函數?沒有命名參數的變量參數列表?

例如:

SomeLogClass("Log Message Here %d").Log(5); 
SomeLogClass("Log Message Here %d").Error(5); 
+0

你的例子不需要可變參數函數的聲明都沒有。也許你可以向我們展示你想要的聲明? – 2010-04-29 16:23:13

回答

2

QString's arg方法看看。那些似乎是你正在尋找的東西。

你一定可以推出自己的產品,儘管實現可能並不是很微不足道,特別是如果你希望它支持printf格式說明符的話。如果printf風格不是必需的,則鏈接replace_all類型的調用聽起來可行。

+0

謝謝。我沒有想到這樣做。 – 2010-04-29 16:34:45

+0

我真的很喜歡這個,它巧妙地避免了這個問題! – Dov 2011-05-10 16:07:36

1

你能寫代碼像上面 - 是的,你可以。但是,如果沒有至少一個非可變參數,您便無法編寫可變參數函數。例如,在printf()中,這是格式字符串。換句話說,你可以寫功能就像:

int printf(const char * format, ...); 

但不是:

int printf(...); 
1

我在哪裏,從我們使用這個:

Log << "LogMessageHere: " << ErrorClass << 5 << whatever << std::endl; 

這是不完全的回答你的問題,但它是你的問題的解決方案,我認爲它更類似於C++。

0

正確的答案是否定的,你不能只定義變量參數,因爲在C/C++的機制,這樣做使用一個固定的參數,以計算一個地址,就像這樣:

void f(int a, ...) { 
    va_list args; 
    va_start(args, a); // without a, this macro DOESN'T WORK!!! 


} 

您標記的答案通過默認參數來解決它。但是,這應該教給新手的是,拖欠論點並不意味着論證不通過,這意味着你不必輸入它們。

void f (int a = 0, ...) 

所以,當你調用F你可以寫:

f(); 

但是在內部,它的寫F(0)