Podczas realizacjistd::experimental::optional
(cppreference.com) Ja irytować w specyfikacji konkretnego konstruktora, a mianowicie:std :: eksperymentalny :: opcjonalny <T> realizacja: Constexpr konstruktor zamieszanie
constexpr optional(const T& value); // (4)
(Source)
Ten konstruktor umożliwia utworzenie w kontekście optional<T>
dla typu łatwego do zniszczenia T
w kontekście constexpr
. Podczas gdy pierwszy wymóg, a mianowicie wyłączenie dostarczonego przez użytkownika destruktora w tym przypadku, aby ustawić optional<T>
jako literał, jest prosty do rozwiązania, nie wiem, jak obejść ograniczenie w zakresie miejsca-nowe nie jest dozwolone w constexpr .
Myślałem, że mam zaimplementować optional<T>
przy użyciu std::aligned_storage<T>
, aby umożliwić typom T
, które nie są domyślnie możliwe do skonstruowania i spełniają ewentualne wymagania dotyczące wyrównania. Ale jak już powiedziałem, constexpr
zabrania mi stosowania nowego miejsca docelowego w tym konkretnym konstruktorze.
Czy muszę dużo kawy i nie widzę tutaj oczywistego rozwiązania?
Dziękuję
Możliwy duplikat [Jak używać std :: opcjonalnie?] (Http://stackoverflow.com/questions/16860960/how-should-one- use-stdoptional) – Matriac
@Matriac to jest pytanie dotyczące strony implementacji. – nshct
"Uzwiązek" może działać dla tego konkretnego konstruktora, ale nie jestem pewien, czy wystarczy obsłużyć wszystkie przypadki. – hvd