Scala ライクな Option / Haskell ライクな Maybe クラスを C++ で実装したいと考えています。効率的な理由から、私は動的に割り当てられたメモリを使用したくありませんし、ポリモーフィズムも使用したくありません。さらに、オプションが 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 ();
}
};