是否有可能具有可變參數和沒有命名參數的函數?沒有命名參數的變量參數列表?
例如:
SomeLogClass("Log Message Here %d").Log(5);
SomeLogClass("Log Message Here %d").Error(5);
是否有可能具有可變參數和沒有命名參數的函數?沒有命名參數的變量參數列表?
例如:
SomeLogClass("Log Message Here %d").Log(5);
SomeLogClass("Log Message Here %d").Error(5);
在QString's arg方法看看。那些似乎是你正在尋找的東西。
你一定可以推出自己的產品,儘管實現可能並不是很微不足道,特別是如果你希望它支持printf格式說明符的話。如果printf風格不是必需的,則鏈接replace_all
類型的調用聽起來可行。
謝謝。我沒有想到這樣做。 – 2010-04-29 16:34:45
我真的很喜歡這個,它巧妙地避免了這個問題! – Dov 2011-05-10 16:07:36
你能寫代碼像上面 - 是的,你可以。但是,如果沒有至少一個非可變參數,您便無法編寫可變參數函數。例如,在printf()中,這是格式字符串。換句話說,你可以寫功能就像:
int printf(const char * format, ...);
但不是:
int printf(...);
我在哪裏,從我們使用這個:
Log << "LogMessageHere: " << ErrorClass << 5 << whatever << std::endl;
這是不完全的回答你的問題,但它是你的問題的解決方案,我認爲它更類似於C++。
正確的答案是否定的,你不能只定義變量參數,因爲在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)
你的例子不需要可變參數函數的聲明都沒有。也許你可以向我們展示你想要的聲明? – 2010-04-29 16:23:13