Sto scrivendo un alias modello di promozione simile a boost :: promote ma per C++ 11. Lo scopo di questo è evitare avvisi quando si recuperano argomenti da funzioni varidiche. per esempio.C++ 11 tipo tratto per distinguere tra classe enum e normale enum
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;
}
Il Promuovere modello alias promuove il tipo di seguito la promozione argomento di default per gli argomenti variadic: 1) Un numero intero che è più piccolo di un int è promosso a int 2) Un galleggiante è promosso a raddoppiare
Il mio problema è che è possibile promuovere un enumerazione C++ standard ma una classe enum C++ 11 non viene promossa (il compilatore non genera un avviso). Voglio Promuovere di lavorare con una normale enum ma ignorare una classe enum di C++ 11.
Come posso distinguere tra una classe di enumerazione e un'enumerazione nel mio alias di modello Promuovi?
Il vero problema è che stai usando 'va_arg's invece di una' std :: initializer_list' e/o modelli variadic. – Fanael
Grazie per il suggerimento, ma ho la va_list perché sto lavorando con un'interfaccia C. – Sam
@ Sam: la mia risposta è stata risolta? –