C++ 11標準指定vwscanf
可通過標頭<cwchar>
(因此可用<wchar.h>
)獲得。但是它似乎缺乏Visual C++。有了這個功能,我可以寫出&hellip;解決Visual C++中缺少vwscanf的更好方法?
inline int scanf(CodingValue const* format, ...)
{
va_list args;
va_start(args, format);
return ::vwscanf(format->ptr(), args);
}
但是如果沒有它,即用Visual C++ 10.0,這似乎也缺乏C++ 11可變參數模板的支持,我’米減少到寫作&hellip;
inline int scanf(
CodingValue const* format,
void* a01 = 0, void* a02 = 0, void* a03 = 0, void* a04 = 0, void* a05 = 0,
void* a06 = 0, void* a07 = 0, void* a08 = 0, void* a09 = 0, void* a10 = 0,
void* a11 = 0, void* a12 = 0
)
{
int const nArgs = !!a01 + !!a02 + !!a03 + !!a04 + !!a05 + !!a06 +
!!a07 + !!a08 + !!a09 + !!a10 + !!a11 + !!a12;
BasicCodingValue const* const f = format->ptr();
switch(nArgs)
{
case 0: return ::wscanf(f);
case 1: return ::wscanf(f,a01);
case 2: return ::wscanf(f,a01,a02);
case 3: return ::wscanf(f,a01,a02,a03);
case 4: return ::wscanf(f,a01,a02,a03,a04);
case 5: return ::wscanf(f,a01,a02,a03,a04,a05);
case 6: return ::wscanf(f,a01,a02,a03,a04,a05,a06);
case 7: return ::wscanf(f,a01,a02,a03,a04,a05,a06,a07);
case 8: return ::wscanf(f,a01,a02,a03,a04,a05,a06,a07,a08);
case 9: return ::wscanf(f,a01,a02,a03,a04,a05,a06,a07,a08,a09);
case 10: return ::wscanf(f,a01,a02,a03,a04,a05,a06,a07,a08,a09,a10);
case 11: return ::wscanf(f,a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11);
case 12: return ::wscanf(f,a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,a12);
}
}
或者,我可以做一些彙編,因爲我不喜歡15年前,當我遇到類似的(或者相同)的問題,但是,這並不手感相當不錯。
你能提出一些更好的方法嗎?
*您可以*,但到底爲什麼會要? – Puppy
檢出http://social.msdn。microsoft.com/Forums/en-AU/vclanguage/thread/b043efbc-b4d8-413b-bd21-937bd0d5dd8e –
@EmileCormier - 這些不是引用或任何你不能在C中做的,所以我不認爲這是一個問題在這裏。 – Flexo