2
我试图实现std::optional
与constexpr
支持作为一种做法。用法将是这样的:constexpr std ::可选的可能实现
constexpr optional<int> x(123);
int arr[*x];
当试图实现这个我有这个问题,我一直没能解决:内部的optional<T>
对象,我用一个std::aligned_storage_t<sizeof (T), alignof (T)>
对象存储的值,在optional<T>
的构造函数中使用放置新元素来构建存储中的值。
constexpr optional(const T& value)
noexcept(std::is_nothrow_copy_constructible<T>::value)
: ...
{
new (ptr_to_storage) T(value); // this breaks `constexpr`
}
我还能如何实现这一点:但是放置新不能在constexpr
构造函数中使用吗?
哇,这是我有生以来预期真的太多的代码。 –
@ZizhengTai欢迎来到C++ – James
@james,欢迎在C++中实现近乎语言级的功能。 ;) – Yakk