在c 11中实现boost :: optional

在c 11中实现boost :: optional,第1张

概述我正在尝试使用c 11功能实现boost :: optional之类的数据结构.这是我到目前为止: template<typename T>struct maybe { bool valid; union { T value; }; maybe() : valid(false) {} maybe(const T& _v) { valid = true; 我正在尝试使用c 11功能实现boost :: optional之类的数据结构.这是我到目前为止:
template<typename T>struct maybe {  bool valID;  union {    T value;  };  maybe() : valID(false) {}  maybe(const T& _v) {  valID = true;    new (&value) T(_v);  }  maybe(const maybe& other) {    if (other.valID) {      valID = true;      new (&value) T(other.value);    }    else valID = false;  }  ~maybe() {     if (valID)       value.~T();  }  bool is_valID() { return valID; }  operator T&() {    if (valID) return value;    throw std::bad_exception();  }};

我利用无限制联合功能为可选值创建一个正确对齐的空间,该空间可以原位存储,而不是动态分配空间.事情很有效,除非我想创建一个可能的<>有参考.例如,可能< int&>导致g 4.7抱怨:

error: ‘maybe<int&>::<anonymous union>::value’ may not have reference type ‘int&’because it is a member of a union

我该怎么做才能制作类商店参考?我们也欢迎任何其他改进/建议.

解决方法 要使这个工作与引用一起使用,你肯定需要一个显式的特化,因为你不能做一个新的引用:你需要使用指针存储.

除此之外,代码缺少一个复制赋值运算符.移动构造函数和移动赋值运算符也会很好(特别是因为这是重新实现boost :: optional的第一个原因:boost中的那个缺少它们).

总结

以上是内存溢出为你收集整理的在c 11中实现boost :: optional全部内容,希望文章能够帮你解决在c 11中实现boost :: optional所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存