Piszę alias szablonu promocji podobny do boost :: promot, ale do C++ 11. Celem tego jest uniknięcie ostrzeżeń podczas pobierania argumentów z funkcji zmiennych. na przykładCecha typu C++ 11 rozróżniająca klasę wyliczeń i wyliczenie regularne
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;
}
Promuj szablonu alias promuje rodzaj następujące promocji domyślnym argumentem dla zmiennej liczbie argumentów argumentów: 1) liczbę całkowitą, która jest mniejsza niż int jest promowany do int 2) pływak jest promowany podwoić
Mój problem polega na tym, że standardowe wyliczanie C++ może być promowane, ale klasa enum C++ 11 nie jest promowana (kompilator nie generuje ostrzeżenia). Chcę, aby Promote działał z regularnym wyliczaniem, ale ignoruje klasę enum C++ 11.
Jak odróżnić klasę wyliczeniową od wyliczenia w aliasie Promuj szablon?
Prawdziwy problem polega na tym, że używasz 'va_arg's zamiast' std :: initializer_list' i/lub variadic templates. – Fanael
Dzięki za napiwek, ale mam listę va_list, ponieważ pracuję z interfejsem C. – Sam
@Sam: Czy moja odpowiedź rozwiązuje twój problem? –