В стандарте C++ 11 есть шаблон std::conditional<>
для выбора типа с помощью некоторого логического состояния во время компилятора. Как выполнить ту же операцию, но для выбора значения init для инициализации переменных? Подобно type a = (exp) ? first_value : second_value;
.Как выполнить инициализацию условной переменной во время компиляции?
Я использую свой шаблон:
template<bool B, typename T>
inline constexpr T&& conditional_initialize(T&& i1, T&& i2) {
return B ? std::move(i1) : std::move(i2);
}
Но он может быть использован только для типов POD: int a = conditional_initialize<true>(1, 2);
. Для инициализации массива этот шаблон скомпилирован с ошибкой. Неправильный пример компиляции: сообщение int a[] = conditional_initialize<true>({1, 2}, {3,4,5});
Кто может помочь мне с шаблоном?
@AndyG Нет, это 'станд :: initializer_list –
alexeykuzmin0
' 'Int А [] = conditional_initialize ({1, 2}, {3,4,5});' Это не может работать, вы не можете копировать или перемещать построить встроенные массивы. –
@ alexeykuzmin0 это было бы действительно, но, к сожалению, [шаблоны не могут вывести 'std :: initializer_list'] (http://stackoverflow.com/a/12431810/3233393). – Quentin