我正在寫一個類似於boost :: promote的促銷模板別名,但對於C++ 11。 這樣做的目的是在從varidic函數中檢索參數時避免警告。例如C++ 11類型特徵來區分枚舉類和常規枚舉
template <typename T>
std::vector<T> MakeArgVectorV(int aArgCount, va_list aArgList)
{
std::vector<T> args;
while (aArgCount > 0)
{
args.push_back(static_cast<T>(va_arg(aArgList, Promote<T>)));
--aArgCount;
}
return args;
}
的促進模板別名促進以下默認參數晉升爲可變參數的類型: 1)一個整數,是小於一個int被提升爲int 2)浮子被提升到一倍
我的問題是,可以提升標準C++枚舉,但不推薦C++ 11枚舉類(編譯器不會生成警告)。我想促進與常規枚舉一起工作,但忽略C++ 11枚舉類。
如何分辨我的Promote模板別名中的枚舉類和枚舉之間的區別?
真正的問題是,您正在使用'va_arg's而不是'std :: initializer_list'和/或variadic模板。 – Fanael 2013-03-23 11:50:58
感謝您的提示,但我有va_list,因爲我正在使用C接口。 – Sam 2013-03-23 13:08:17
@Sam:我的答案能解決您的問題嗎? – 2013-03-24 17:14:26