我想在C++中实现类似Scala的Option/Haskell类Maybe类。出于效率原因,我不想使用动态分配的内存,也不想使用多态。另外,如果Option是None,我不希望创建嵌入类型的任何对象。C++选项/可能类
有人可以告诉我以下方法是否会导致问题?我必须为我的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();
}
};
你可以检查[Boost.Optional](http://www.boost.org/doc/libs/1_51_0/libs/optional/doc/html/index.html)是如何实现的。 – kennytm
感谢您的提示。我应该知道Boost有它。 – JohnB
实际上这是一个非常聪明的表示。你也需要处理**赋值**,否则我真的很喜欢直接存储指针而不是布尔值的想法。让事情变得更容易。 –