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

1688做网站难吗关键词seo排名怎么选

1688做网站难吗,关键词seo排名怎么选,青岛免费建站网络推广,网站网页能自己做吗一、std::tuple和std::pair 在传统的C里一直有一个问题让开发者不爽,就是无法返回多个值。一般来说,返回多个都建议采用封装的模式,比如弄一个结构体或者类啥的。这样做一定时没有问题的,但对于一些只返回一些简单值并且只在偶尔…

一、std::tuple和std::pair

在传统的C++里一直有一个问题让开发者不爽,就是无法返回多个值。一般来说,返回多个都建议采用封装的模式,比如弄一个结构体或者类啥的。这样做一定时没有问题的,但对于一些只返回一些简单值并且只在偶尔情况下使用的时候儿,封装一个结构体之类的有点用力过猛的意思。
所以在后来出现了std::pair,它其实就是一个类似于封装的一个结体可简化如下:

template<typename T1,typename T2>
struct pair
{T1 first;T2 second;
};

这样一来,就可以在一些需要返回多个值的情况下使用此数据结构。但是这也只是简化了使用而并没有达到其它语言的多值返回,开发者也只能接受。但随着std::tuple的出现,使得std::pair变得有点鸡肋的味道。毕竟这个数据结构虽然说有点方便,但还是有点不方便(比如传三个或者更多的参数)?更让人不好理解的是,泛型的T很难描述first和second的关系,这对于具体到某个公司或者说某个程序来说不算什么大问题,但用在标准库里,可是真得有点问题。
这两个问题的存在,后者在C++20中进行了完善,使用了具名的数据结构体,而前者则是出现了std::tuple。相比std::pair它可以更多的处理异类的参数(当然,同类更没问题),不过它的访问方式相比std::pair有了一些小小的不方便。只能使用类型或索引“std::get(stuTuple) or std::get<0>(stuTuple)”。不过在C++17还提供了聚合初始化访问的方式,类似下面的代码:


auto [a,b,c,d] = getTuple();
std::cout<<a<<b<<c<<d<<std::endl;

它等于是简化了使用std::tie来处理这种情况,这样做的好处就不言而喻了。
为了鼓励开发者从std::pair转到std::tuple(std::tuple的应用还真是不多),STL提供了从pair<T,U>到 tuple<T,U>的隐式转换,但反之则不行。这也算是一种诱导法则吧。

二、类tuple类型及处理

在结构化绑定中,理论上讲,只要成员是公有的,都可以直接进行处理。类似于下面的代码:

struct Data{...};
Data d{...};
auto [a,b,c] = d;

在C++17中提供了一个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_size<Data> : std::integral_constant<int, 3> {};
template <> struct std::tuple_element<0, Data> { using type = int; };
template <> struct std::tuple_element<1, Data> { using type = int; };
template <> struct std::tuple_element<2, 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_constant<std::size_t, value>),返回一个大于0的长度。
2、std::tuple_element_t<i, T>(i与数组定义类似从0~tuple.size-1)符合要求,其类型要与自定义类型相匹配。
3、必须实现tuple.get或get(tuple),并返回tuple的第i个元素值.
此功能在C++17中已经有所体现,到了C++23有着更强有力的支持:
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.dt0577.cn/news/43079.html

相关文章:

  • 西安电商平台网站google play下载官方版
  • 河南网站建设37518sem 优化软件
  • 如何做网络投票网站网络营销的方式都有哪些
  • 连云港做网站公司seo外链发布工具
  • 网站优化员seo招聘整合营销
  • wordpress做新闻网站seo关键词推广优化
  • 还是新能源专业好seo舆情优化
  • 长泰建设局网站百度互联网营销顾问
  • 网站常用的字体网站设计制作在哪里找
  • wordpress建站seo好做吗西安网是科技发展有限公司
  • 网站建设行业资讯关键词是什么意思
  • 的建站公司百度网站app下载
  • 快递网站策划怎么做ppt百度互联网营销是什么
  • 东莞网站建设网站建设百度推广一天烧多少钱
  • 南昌专业网站建设信息竞价排名名词解释
  • 网站开发文件上传到服务器交换友情链接的目的
  • 如何做网站策划百度网址链接
  • dede后台网站主页重庆百度推广开户
  • 怎么看网站是不是h5做的广告软文是什么意思
  • 淘宝联盟链接的网站怎么做最新国际新闻事件今天
  • 山西省网站建设关键词推广排名软件
  • net网站开发教程sem是什么意思的缩写
  • 贾汪网站开发什么是白帽seo
  • 网站icp备案信息不能为空搜索排名优化策划
  • 新网站排名优化怎么做营销策划咨询机构
  • 个人网站设计规划书淘宝推广方法有哪些
  • 网站建设教程论坛seo排名赚app靠谱吗
  • 搜外网 seo教程seo诊断网站
  • 四川做网站的便宜的seo官网优化
  • 白城网站建设站长之家收录查询