Ich versuche std::optional
mit constexpr
Unterstützung als eine Praxis zu implementieren. Die Nutzung wird so etwas wie:consExpr Std :: optional mögliche Implementierung
constexpr optional<int> x(123);
int arr[*x];
Beim Versuch, das ich dieses Problem hätte zu implementieren, die ich nicht in der Lage zu lösen: Innerhalb eines optional<T>
Objekts, verwende ich ein std::aligned_storage_t<sizeof (T), alignof (T)>
Objekt den Wert zu speichern und Verwenden Sie die neue Platzierung in optional<T>
's Konstruktor, um Wert in den Speicher zu erstellen. Aber Platzierung neu kann nicht in einem constexpr
Konstruktor verwendet werden:
constexpr optional(const T& value)
noexcept(std::is_nothrow_copy_constructible<T>::value)
: ...
{
new (ptr_to_storage) T(value); // this breaks `constexpr`
}
Wie sonst kann ich das umsetzen?
Wow, das ist wirklich viel mehr Code, den ich jemals erwartet. –
@ZizhengTai Willkommen in C++ – James
@James gut, willkommen zu implementieren eine nahe Sprache-Level-Funktion in C++. ;) – Yakk