Я пишу псевдоним шаблона продвижения, подобный boost :: promotion, но для C++ 11. Целью этого является избежание предупреждений при извлечении аргументов из функций varidic. напримерХарактеристика типа C++ 11 для дифференциации класса 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;
}
Продвижения шаблона псевдонима способствует типу следующего продвижения аргумента по умолчанию для переменных числа аргументов: 1) Целого число, которое меньше ИНТ назначен Int 2) Поплавок способствуют двойной
Моя проблема в том, что стандартное перечисление C++ может быть продвинуто, но класс enum C++ 11 не продвигается (компилятор не генерирует предупреждение). Я хочу, чтобы Promote работал с регулярным перечислением, но игнорировал класс enum C++ 11.
Как я могу объяснить разницу между классом enum и перечислением в моем псевдониме шаблона Promote?
Настоящая проблема заключается в том, что вы используете 'va_arg' вместо' std :: initializer_list' и/или вариационных шаблонов. – Fanael
Спасибо за отзыв, но у меня есть va_list, потому что я работаю с C-интерфейсом. – Sam
@Sam: Я отвечаю, решая вашу проблему? –