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

电子商务网站建设的成本分析学习网站建设需要什么

电子商务网站建设的成本分析,学习网站建设需要什么,建站网站免费,网站建设费用IP本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…

本文主要介绍如何展开可变参数的参数包

1.C语言的va_list展开可变参数
#include <iostream>
#include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (int i = 0; i < count; i++) {// 调用va_arg依次获取可变参数的参数值int value = va_arg(args, int);std::cout << value << " ";}// 使用va_end清理变量argsva_end(args);std::cout << std::endl;
}int main() {printNumbers(3, 1, 2, 3); // 输出: 1 2 3printNumbers(5, 1, 2, 3, 4, 5); // 输出: 1 2 3 4 5
}

       使用va_list感觉还挺麻烦的,需要提前知道参数个数,并且还得需要知道入参类型。因此不如直接使用数组了。

2.C++的initializer_list展开可变参数
#include <iostream>template <typename T>
void printNumbers(std::initializer_list<T> nums) {// 获取可变参数长度为std::cout << "可变参数长度为:" << nums.size() << std::endl;std::cout << std::endl;// 遍历输出可变参数,方法1for (const T& i: nums) {std::cout << i << " ";}std::cout << std::endl;
}int main() {printNumbers({"1","qq"});printNumbers({1, 2, 3});
}
3.可变参数模板--递归函数方式展开可变参数
#include <iostream>using namespace std;void print() {cout << endl;
}template <typename T> 
void print(const T& t) {cout << t << endl;
}template <typename First, typename... Rest> 
void print(const First& first, const Rest&... rest) {cout << first << ", ";print(rest...); // recursive call using pack expansion syntax
}int main()
{print(); // calls first overload, outputting only a newlineprint(1); // calls second overload// these call the third overload, the variadic template,// which uses recursion as needed.print(10, 20);print(100, 200, 300);print("first", 2, "third", 3.14159);
}

       使用这种方法,可变参数可以是任意类型的,不需要都统一是一个类型了。

       这种方法需要提供一个参数包展开的函数和一个递归终止函数,二者同名。递归终止函数的参数可以为0,1,2或者多个(一般用到0个或1个),当参数包中剩余的参数个数等于递归终止函数的参数个数时,就调用递归终止函数,则函数终止。

4.可变参数模板--折叠表达式展开可变参数
#include <iostream>template<typename... Args>
void prints(Args... args) {//注意args在前,省略号在后否则报错//std::cout <<sizeof...(args)<<std::endl;//sizeof...() 运算符可获取参数包参数个数((std::cout << args << " "), ...); // 折叠表达式展开参数包std::cout << std::endl;
}int main() {prints("test", 2, 'k');   // 输出: test 2 kprints(1, 2, 3, 4, 5);   // 输出: 1 2 3 4 5
}

       折叠表达式是C++17 才引入的新特性,使用折叠表达式可以很方便实现展开可变参数,但是可读性也会大打折扣。在此使用的是折叠表达式的逗号运算符。折叠表达式还会分为左折叠和右折叠。

5.可变参数模板--结合std::tuple展开可变参数
#include <iostream>
#include <tuple>// 终止条件:当索引等于元组大小时
template<size_t I = 0, typename Tuple>
typename std::enable_if<I == std::tuple_size<Tuple>::value, void>::type
printtp(const Tuple&) {// 空实现,递归终止
}// 递归展开:当索引小于元组大小时
template<size_t I = 0, typename Tuple>
typename std::enable_if<I < std::tuple_size<Tuple>::value, void>::type
printtp(const Tuple& t) {std::cout << std::get<I>(t) << std::endl;  // 打印当前元素printtp<I + 1>(t);                         // 递归调用下一个索引
}// 包装函数:将参数包转换为元组并调用printtp
template<typename... Args>
void print(Args... args) {printtp(std::make_tuple(args...));
}int main() {print(1, "hello", 3.14);  // 输出:1\nhello\n3.14return 0;
}

       在这使用了std::tuple数据结构以及类型萃取中常用的std::enable_if。其实本质上还是递归模板参数展开,用起来可能不如直接使用上述方法三。

本文参考:

https://zhuanlan.zhihu.com/p/684295744

C++17常用新特性(十一)---折叠表达式-腾讯云开发者社区-腾讯云

省略号和可变参数模板 | Microsoft Learn

https://zhuanlan.zhihu.com/p/731232067

C++中神奇的tuple:详解使用技巧和实例解析-腾讯云开发者社区-腾讯云

C++之std::enable_if_std enable if-CSDN博客

c++11——可变参数模板 - 农民伯伯-Coding - 博客园

http://www.dtcms.com/wzjs/780210.html

相关文章:

  • 网站被封了怎么办筑龙网建筑资料下载
  • 重庆建设摩托车官方网站从化公司网站建设
  • 宁德商城网站建设免费印章在线制作
  • 视频网站建设方案书小说网站得广告怎么做
  • 南京网站公司哪家好公共资源交易中心吃香吗
  • 网站建设模板登录界面珠海网站制作
  • 众讯 网站建设网站导航网站开发
  • 怎么搭建php网站网站的建设费计入什么费用
  • 包包17网站一起做网店广告设计培训班学校有哪些
  • ping站长工具怎么搭建网站视频教程
  • 绍兴做网站多少钱php网站开发说明文档
  • 怎样创建个人的网站本地服务网站开发
  • 深圳市网站设ios7风格网站
  • 优化后的网站创意字体
  • 当当网网站的建设过程codeus企业wordpress
  • 河源哪有做网站百度云网盘网页版
  • 建设银行博士后招聘网站网站建设的主要技术路线
  • 网站 后台 回车不了西安360免费做网站
  • 无锡做装修网站wordpress秀
  • 50万做网站综治暨平安建设网站
  • 电话销售做网站的术语嘉祥网站seo
  • 北京网站开发哪家公司好网站建设微享互动
  • 龙口市建设局网站做网站百度推广
  • 能打开国家禁止网站的浏览器wordpress 文章分页
  • 怎样做婚恋网站长沙疾控发布提醒
  • 瀑布流网站后台做网站站长一年能赚多少钱
  • 抖音的电子商务网站建设php网站开发能挣多钱
  • wordpress 无法添加媒体东莞seo关键词优化
  • 自己建设的手机网站做百度地图定位网站开发的需要的技术人员
  • 网站建设的一些销售技巧wordpress匿名投稿