我想在 C++ 中实现一个类 Scala 的 Option / Haskell 类的 Maybe 类。出于效率原因,我不想使用动态分配的内存,也不想使用多态性。此外,如果 Option 为 None,我不希望创建任何嵌入类型的对象。
谁能告诉我以下方法是否会导致问题?我必须为我的 Option 类中的嵌入对象静态分配内存,但我无法定义嵌入类型的成员字段,因为即使 Option 为 None,这也会在创建 Option 对象时初始化。
template <typename T>
class Option {
private:
uint8_t _storage [sizeof (T)];
T * _embedded;
public:
Option () : _embedded (nullptr) {
}
Option (const T & obj) : _embedded (new (_storage) T (obj)) {
}
Option (const Option<T> & other)
: _embedded (
other->_embedded ? new (_storage) T (other->_embedded) : nullptr
) {
}
// ...
~Option () {
if (_embedded) _embedded->~T ();
}
};