当前位置: 首页 > news >正文

湖北联兴建设有限公司网站什么是域名 空间 网站源代码

湖北联兴建设有限公司网站,什么是域名 空间 网站源代码,网站可信认证在哪里做,宁德市建设银行网站一、std::tuple和std::pair 在传统的C里一直有一个问题让开发者不爽#xff0c;就是无法返回多个值。一般来说#xff0c;返回多个都建议采用封装的模式#xff0c;比如弄一个结构体或者类啥的。这样做一定时没有问题的#xff0c;但对于一些只返回一些简单值并且只在偶尔…一、std::tuple和std::pair 在传统的C里一直有一个问题让开发者不爽就是无法返回多个值。一般来说返回多个都建议采用封装的模式比如弄一个结构体或者类啥的。这样做一定时没有问题的但对于一些只返回一些简单值并且只在偶尔情况下使用的时候儿封装一个结构体之类的有点用力过猛的意思。 所以在后来出现了std::pair它其实就是一个类似于封装的一个结体可简化如下 templatetypename T1,typename T2 struct pair {T1 first;T2 second; };这样一来就可以在一些需要返回多个值的情况下使用此数据结构。但是这也只是简化了使用而并没有达到其它语言的多值返回开发者也只能接受。但随着std::tuple的出现使得std::pair变得有点鸡肋的味道。毕竟这个数据结构虽然说有点方便但还是有点不方便比如传三个或者更多的参数更让人不好理解的是泛型的T很难描述first和second的关系这对于具体到某个公司或者说某个程序来说不算什么大问题但用在标准库里可是真得有点问题。 这两个问题的存在后者在C20中进行了完善使用了具名的数据结构体而前者则是出现了std::tuple。相比std::pair它可以更多的处理异类的参数当然同类更没问题不过它的访问方式相比std::pair有了一些小小的不方便。只能使用类型或索引“std::get(stuTuple) or std::get0(stuTuple)”。不过在C17还提供了聚合初始化访问的方式类似下面的代码 auto [a,b,c,d] getTuple(); std::coutabcdstd::endl; 它等于是简化了使用std::tie来处理这种情况这样做的好处就不言而喻了。 为了鼓励开发者从std::pair转到std::tuple(std::tuple的应用还真是不多)STL提供了从pairT,U到 tupleT,U的隐式转换但反之则不行。这也算是一种诱导法则吧。 二、类tuple类型及处理 在结构化绑定中理论上讲只要成员是公有的都可以直接进行处理。类似于下面的代码 struct Data{...}; Data d{...}; auto [a,b,c] d; 在C17中提供了一个std::is_aggregate元编程的接口来判断是否一个可聚合初始化的类型。但是对于一些自定义的非聚合类型呢这块也有办法。这就是本文提到的类tuple的实现先看代码 #include tuple class Data { private:int id;int num;int value;public:Data(int d, int n, int v) : id{d}, num{n}, value{v} {}int getV() const { return value; }int getN() const { return num; }int getID() const { return id; } };template struct std::tuple_sizeData : std::integral_constantint, 3 {}; template struct std::tuple_element0, Data { using type int; }; template struct std::tuple_element1, Data { using type int; }; template struct std::tuple_element2, Data { using type int; };template int i auto get(const Data d) {static_assert(0 i i 2);if constexpr (i 0) {return d.getID();} else if (i 1) {return d.getN();} else {return d.getV();} }void testTuple() {Data data{3, 6, 9};auto [id, num, v] data; }说明 要想实现类tuple类型就需要对下面的三个约束条件进行实现 1、std::tuple_size_v要符合要求std::integral_constantstd::size_t, value返回一个大于0的长度。 2、std::tuple_element_ti, Ti与数组定义类似从0tuple.size-1符合要求其类型要与自定义类型相匹配。 3、必须实现tuple.get或get(tuple)并返回tuple的第i个元素值. 此功能在C17中已经有所体现到了C23有着更强有力的支持 1、任意标准类tuple类型可以转换成std::tuple同时能进行大小/相等的比较 ;任意长度为2的标准tuple类型和std::pair可互转并且可以比较大小/相等 2、任意两个标准类tuple类型之间有common_reference和common_type 3、任意标准类tuple类型现在都能成为tuple_cat/apply/make_from_tuple的参数 这样一来基本上常见的一些问题都可以解决了。 三、注意点 使用std::tuple和类tuple的人不多应用场景也不多。但是注意点却很多 1、尽量使用标准类tuple类型tuple, pair, array, ranges::subrange否则会有一些可能想不到意外 2、不要想把tuple相关的函数悉数应用在类tuple类型中 3、尽量使用新标准的编译器 四、总结 人们总是希望新标准能解决问题但没想到的是往往新的标准又会引入新的问题。这本身就是一个动态循环的问题已经是一个众人皆知的现象但人们仍然还是抱有一种希望吧。不过新的标准会把一些急切的问题解决并引领开发者不断的向着更好的方向发展这才是标准发展的意义。
http://www.w-s-a.com/news/311944/

相关文章:

  • 岫岩做网站软件开发和app开发的区别
  • 邯郸质量一站式服务平台上线如何做国外销售网站
  • 内蒙古工程建设协会网站sem优化策略
  • Linux网站建设总结建设电子商务平台
  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图
  • wap网站搜索wordpress工作室模板
  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道
  • 学校网站内容四川手机网站开发
  • 网站制作公司违法商业网站运营成本
  • 显示佣金的网站是怎么做的广告设计主要做哪些
  • 做阿里网站的分录济南seo网站排名关键词优化
  • 北京建设银行纪念钞预定官方网站wordpress中文优化版
  • 宝安做棋牌网站建设找哪家效益快创意设计师个人网站
  • 做线上网站需要多少钱系统开发板价格
  • 建筑企业登录哪个网站wordpress feed地址
  • 网站建设流程百科提升seo搜索排名