Standard C++ 11 ma szablon std::conditional<>
dla wyboru typu przez pewien warunek boolowski w czasie kompilacji. Jak wykonać tę samą operację, ale w celu wybrania wartości początkowej dla inicjalizacji zmiennej? Podobny do type a = (exp) ? first_value : second_value;
.Jak wykonać inicjowanie zmiennej warunkowej w czasie kompilacji?
używam szablonu:
template<bool B, typename T>
inline constexpr T&& conditional_initialize(T&& i1, T&& i2) {
return B ? std::move(i1) : std::move(i2);
}
Ale to może być stosowane tylko dla typów POD: int a = conditional_initialize<true>(1, 2);
. Do inicjalizacji macierzy ten szablon jest kompilowany z błędem. Źle przykład kompilacji: Komunikat int a[] = conditional_initialize<true>({1, 2}, {3,4,5});
Kto może mi pomóc w szablonie?
@AndyG Nie, to 'std :: initializer_list' –
alexeykuzmin0
'int a [] = conditional_initialize ({1, 2}, {3,4,5});' To nie może pracować, nie można skopiować lub przenieść skonstruuj wbudowane tablice. –
@ alexeykuzmin0 byłoby rzeczywiście, ale niestety [szablony nie mogą wywnioskować 'std :: initializer_list'] (http://stackoverflow.com/a/12431810/3233393). – Quentin