我作爲ç使得可變參數所需
AddSprintf(char* , ...)
我要讓編譯時錯誤,如果有人呼叫它而不兩個參數的函數。 目前如果有人打電話像
AddSprintf("hello")
它的工作原理。但是我想禁用像這樣的調用。 有什麼辦法使用g ++我可以強制傳遞參數?
我作爲ç使得可變參數所需
AddSprintf(char* , ...)
我要讓編譯時錯誤,如果有人呼叫它而不兩個參數的函數。 目前如果有人打電話像
AddSprintf("hello")
它的工作原理。但是我想禁用像這樣的調用。 有什麼辦法使用g ++我可以強制傳遞參數?
超載AddSprintf:
void AddSprintf(const char* , ...) {}
void AddSprintf(const char*);
編譯AddSprintf("hello")
時,然後你得到一個奇怪的錯誤消息,但請記住,與C++ 11,因爲他們是類型安全,你應該使用可變參數模板。
什麼
AddSprintf(char* , char*, ...)
?
你不能,真的。這些點代表「零或多個論點」,並且無法知道是否有任何論點。除了使用匯編程序並對堆棧指針進行一些檢查之外。
正如0A0D所說,它是可變參數 - 根據定義,編譯器會很好。如果你想讓它在編譯時失敗,你可能不得不拉動技巧 - 例如,如果你是單元測試,有代碼讓函數失敗並帶有一個參數調用,這樣新的程序員就會知道他們不能做那。
這就是說,你爲什麼要這麼做?您的問題可能有更好的解決方案。
如果你想堅持到同一個名字,那麼你可以使用可變參數宏:
#define AddSprintf(X,...) AddSprintf(X,__VA_ARGS__)
但要非常小心使用此解決方案,爲AddSprintf
首先工作作爲文本替換在預處理階段。那麼只有它會是一個功能。
添加第二個參數不是一個選項? – 2012-03-13 16:44:14
@BoPersson no。我想確保va_list中至少有一個成員 – 2012-03-13 16:47:12