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

简述网站栏目管理山东天齐建设集团网站

简述网站栏目管理,山东天齐建设集团网站,普通人做电商要多少钱,做网站需要哪些技术支持目录 第一题 C代码示例 第二题 C代码示例 第三题 3.1 使用std::integral_constant模板类 3.2 使用std::conditional结合std::is_same判断 总结 第四题 C代码示例 第五题 C代码示例 第六题 C代码示例 第七题 C代码示例 总结 第一题 对于元函数来说#xff0c;…目录 第一题 C代码示例 第二题 C代码示例 第三题 3.1 使用std::integral_constant模板类 3.2 使用std::conditional结合std::is_same判断 总结 第四题 C代码示例 第五题 C代码示例 第六题 C代码示例 第七题 C代码示例 总结 第一题 对于元函数来说数值与类型其实并没有特别明显的差异元函数的输入可以是数值或类型对应的变换可以在数值与类型之间进行。比如可以构造一个元函数输入是一个类型输出是该类型变量所占空间的大小---------这就是一个典型的从类型变换为数值的元函数。尝试构造该函数并测试是否能行。 C代码示例 #include iostream #include type_traitstemplate typename T struct TypeSize {static constexpr size_t value sizeof(T); };int main() {std::cout TypeSizeint::value std::endl; // 输出4int 类型在大多数平台上占用4个字节std::cout TypeSizedouble::value std::endl; // 输出8double 类型在大多数平台上占用8个字节std::cout TypeSizechar::value std::endl; // 输出1char 类型在大多数平台上占用1个字节return 0; } 输出结果 代码详解 在上面的代码中我们定义了一个名为TypeSize的模板结构体它有一个静态成员变量value其默认值是sizeof(T)其中T是TypeSize的模板参数类型。通过sizeof运算符我们可以在编译时获取类型T的大小并将其保存在value中。 在main函数中我们分别测试了int、double和char类型的大小并使用std::cout输出结果。可以看到对于每个类型我们都成功地获取了其在内存中所占空间的大小。 第二题 作为进一步的扩展元函数的输入参数甚至可以是类型与数值混合的。尝试构造一个元函数其输入参数为一个类型以及一个整数。如果该类型所对应对象的大小等与该整数那么返回true否则返回false。 C代码示例 #include iostream #include type_traitstemplate typename T, size_t N struct CheckSize {static constexpr bool value sizeof(T) N; };int main() {std::cout std::boolalpha;std::cout CheckSizeint, 4::value std::endl; // 输出trueint 类型在大多数平台上占用4个字节std::cout CheckSizedouble, 8::value std::endl; // 输出truedouble 类型在大多数平台上占用8个字节std::cout CheckSizechar, 2::value std::endl; // 输出falsechar 类型在大多数平台上占用1个字节return 0; } 输出结果 代码详解 我们使用了一个元函数 CheckSize 结构体 CheckSize 接受两个模板参数类型 T 和大小 N。在元函数中我们使用 sizeof 运算符计算类型 T 的大小并将其与整数 N 进行比较。如果相等则元函数的静态成员变量 value 设置为 true否则设置为 false。 第三题 3.1 使用std::integral_constant模板类 #include iostream #include type_traitstemplate typename T, size_t N struct CheckSize : std::integral_constantbool, sizeof(T) N {};int main() {std::cout std::boolalpha;std::cout CheckSizeint, 4::value std::endl; // 输出trueint 类型在大多数平台上占用4个字节std::cout CheckSizedouble, 8::value std::endl; // 输出truedouble 类型在大多数平台上占用8个字节std::cout CheckSizechar, 2::value std::endl; // 输出falsechar 类型在大多数平台上占用1个字节return 0; } 使用std::integral_constant模板类来实现元函数CheckSize。CheckSize结构体继承自std::integral_constant并提供两个模板参数bool类型表示返回类型以及sizeof(T) N作为值。通过继承自std::integral_constant我们可以从CheckSizeT, N直接访问value成员变量。 3.2 使用std::conditional结合std::is_same判断 #include iostream #include type_traitstemplatetypename T, size_t N struct CheckSize {static constexpr bool value std::is_same_vsizeof(T), N; };int main() {std::cout std::boolalpha;std::cout CheckSizeint, 4::value std::endl; // 输出trueint 类型在大多数平台上占用4个字节std::cout CheckSizedouble, 8::value std::endl; // 输出truedouble 类型在大多数平台上占用8个字节std::cout CheckSizechar, 2::value std::endl; // 输出falsechar 类型在大多数平台上占用1个字节return 0; } 使用了std::conditional结合std::is_same检查类型大小。std::is_same_v是一个用于判断两个类型是否相同的模板sizeof(T)表示类型 T 的大小在此和 N 进行比较。如果两者相同则value被设置为 true否则被设置为 false。 总结 这些是更特殊或不太常见的元函数表示形式这些形式可能适用于某些特定的使用场景或要求。 第四题 本章讨论了以类模板作为元函数的输出尝试构造一个元函数它接收输入后会返回一个元函数后者接收输入后会再返回一个元函数------这仅仅是一个联系不必过于在意其应用场景 C代码示例 #include iostream #include functionaltemplate typename Input struct FirstLayer {template typename Funcstruct SecondLayer {template typename... Argsconstexpr auto operator()(Args... args) const {return Func{}(std::forwardArgs(args)...);}};template typename Funcconstexpr auto operator()(Func) const {return SecondLayerFunc{};} };struct MyFunction {template typename... Argsconstexpr auto operator()(Args... args) const {return sizeof...(Args);} };int main() {FirstLayerint first;auto second first(MyFunction{});std::cout second(1, 2, 3, 4, 5) std::endl; // 输出5返回传入参数的数量return 0; } 输出结果 代码详解 示例中FirstLayer 是一个元函数它接收一个输入类型 Input。FirstLayer 结构体中定义了一个内部模板结构体 SecondLayer它接收一个元函数类型 Func。SecondLayer 结构体中定义了一个函数调用运算符 operator()它接收任意参数 Args...并通过调用 Func 来实现对元函数的调用。 FirstLayer 还定义了一个函数调用运算符 operator()它接收一个元函数类型 Func并返回一个 SecondLayerFunc 对象即返回一个闭包closure元函数。 在 main() 函数中我们先创建一个 FirstLayerint 对象 first。然后我们通过调用 first(MyFunction{}) 来传递一个 MyFunction 元函数对象得到一个 SecondLayer 对象 second。最后我们通过调用 second 来调用传入的 MyFunction 元函数并传递参数 1, 2, 3, 4, 5。 运行示例代码后将输出 5表示传入的参数数量为 5。 这个示例就是一个接收输入并返回元函数的元函数的实现。当 FirstLayer 元函数接收一个输入类型后它返回一个闭包元函数 SecondLayer。你可以继续调用 SecondLayer 元函数并传递其他的元函数来实现更多的函数组合和操作。 第五题 使用SFINAE构造一个元函数输入一个类型T当T存在子类型type时该元函数返回true否则返回false。 C代码示例 #include iostream #include type_traitstemplate typename T struct HasType {// 检查 SFINAE 的辅助函数template typename Ustatic std::true_type test(typename U::type*);template typename Ustatic std::false_type test(...);static constexpr bool value decltype(testT(nullptr))::value; };// 测试用例 struct A {using type int; };struct B {};int main() {std::cout std::boolalpha;std::cout HasTypeA::value std::endl; // 输出trueA 类型存在名为 type 的子类型std::cout HasTypeB::value std::endl; // 输出falseB 类型不存在名为 type 的子类型return 0; } 输出结果 代码详解 示例中HasType 是一个元函数用于检查类型 T 是否具有名为 type 的子类型。我们先定义了两个辅助函数 test一个接收具有 type 子类型的输入类型 U使用 typename U::type* 作为函数参数另一个使用 ... 表示可变参的占位符。在 HasType 元函数中testT(nullptr) 这一表达式启用了 SFINAE 机制如果传递的类型具有名为 type 的子类型则会选择第一个辅助函数进行调用否则会选择第二个辅助函数。使用 decltype 和 std::true_type、std::false_type 来从辅助函数的返回类型中提取布尔值。 在测试用例中我们分别检查了类型 A 和类型 B。因为类型 A 存在名为 type 的子类型所以 HasTypeA::value 的结果为 true。而类型 B 不存在名为 type 的子类型所以 HasTypeB::value 的结果为 false。 第六题 使用在本章中学到的循环代码书写方式编写一个元函数输入一个类型数组输出一个无符号整形数组输出数组中的每个元素表示输入数组中相应类型变量的大小。 C代码示例 #include iostream #include utility #include arraytemplate typename... Types struct SizeOfArray;// 基本情况处理空类型数组 template struct SizeOfArray {using type std::arraystd::size_t, 0; };// 递归情况处理非空类型数组 template typename T, typename... Types struct SizeOfArrayT, Types... {using type std::arraystd::size_t, sizeof...(Types)1; };// 辅助函数打印无符号整型数组 template std::size_t N, std::size_t... Sizes void printSizes(const std::arraystd::size_t, N sizes, std::index_sequenceSizes...) {((std::cout sizes[Sizes] ), ...);std::cout std::endl; }int main() {using MyTypes std::tupleint, double, bool, char;using Sizes typename SizeOfArrayint, double, bool, char::type;Sizes sizes;sizes[0] sizeof(int);sizes[1] sizeof(double);sizes[2] sizeof(bool);sizes[3] sizeof(char);printSizes(sizes, std::make_index_sequencesizes.size()()); // 输出4 8 1 1return 0; } 输出结果 代码详解 在这段代码中我们定义了一个 SizeOfArray 结构体用于计算类型数组的大小。它通过递归方式处理类型数组当类型数组为空时返回一个大小为 0 的 std::array当类型数组非空时返回一个大小为 sizeof...(Types)1 的 std::array其中 sizeof...(Types) 是类型数组的元素个数。 在 main 函数中我们定义了一个类型数组 MyTypes其中包含了 int、double、bool 和 char 类型。然后我们使用 SizeOfArray 结构体计算 MyTypes 数组中各个类型的大小并将它们存储在 Sizes 结构体中。 接下来我们使用 sizeof 操作符获取每个类型的大小并将它们存储在 sizes 数组中的相应位置。 最后我们调用 printSizes 函数打印 sizes 数组中的每个元素。这里使用了 std::make_index_sequence 来生成一个索引序列使得我们可以使用折叠表达式在 printSizes 函数中依次访问 sizes 数组中的元素。 第七题 使用分支短路逻辑实现一个元函数给定一个整数序列判断其中是否存在值为1的元素。如果存在就返回true否则返回false C代码示例 #include iostream// 终止条件判断最后一个元素是否等于 1 template int Last bool hasOne() {return Last 1; }// 递归情况判断当前元素是否等于 1并继续判断后面的元素 template int First, int Second, int... Rest bool hasOne() {return (First 1) || hasOneSecond, Rest...(); }int main() {bool result1 hasOne1, 2, 3, 4(); // 序列中存在值为1的元素返回truebool result2 hasOne2, 3, 4, 5(); // 序列中不存在值为1的元素返回falsestd::cout Result 1: std::boolalpha result1 std::endl;std::cout Result 2: std::boolalpha result2 std::endl;return 0; } 输出结果 代码详解 第一个版本是终止条件用于判断最后一个元素是否等于1。在这个版本中我们只有一个模板参数 Last当 Last 等于 1 时返回 true。 第二个版本是递归情况用于判断当前元素是否等于1并继续判断后面的元素。在这个版本中我们有三个模板参数分别代表当前元素 First、下一个元素 Second以及剩余的元素 Rest...。在递归调用时我们将 Second 作为新的 First并继续判断后面的元素。 通过这段代码我们可以正确判断整数序列中是否存在值为1的元素。 在 main 函数中我们使用两个示例来测试 hasOne 元函数。第一个示例传入的序列为 1, 2, 3, 4其中存在值为1的元素因此返回 true。第二个示例传入的序列为 2, 3, 4, 5其中不存在值为1的元素因此返回 false。 总结 后续会开始陆续更新第二章如果有需要博主讲解其他书也可以私信我
http://www.w-s-a.com/news/499953/

相关文章:

  • 网站建设公司怎么算专业js网站分页怎么做
  • 网和网站的区别phpcms和帝国cms哪个好
  • wordpress改网站名字长沙网络营销外包
  • 宝塔怎么做第二个网站网站内容设计遵循的原则有
  • 网站违反了 google 质量指南免费ppt模版网站
  • 郑州网站建设郑州网站建设成都那家网站建设好
  • 温州网站排名优化公司如何招聘软件网站开发人员
  • 成都 网站建设公司哪家好襄阳行业网站建设
  • wordpress 调用时间做网站seo的公司哪家好
  • 手机上网站搭建网站账户系统
  • 西乡网站的建设柳州建站
  • 宁夏网站建设怎么样互联网 网站设计
  • 成都关键词seo推广平台手机端关键词排名优化软件
  • 学做软件的网站卡盟平台
  • 网站构建建设案例展示关于做服饰网站的首页
  • 如何建设网站论坛凡科建站手机版登录
  • 建设银行门户网站惠州公司网站建设价格
  • 用python开发网站网站如何取消验证码
  • 公司做企业网站互联网建网站
  • 建网站需要的费用公司注册后怎么做网站
  • 宣传电脑的网站开发运动网站建设教程
  • 网站建设公司都会有哪些花销做网站公司商丘
  • 网站风格有哪些软件定制和开发
  • 公司网络维护具体做什么河南网站推广优化公司哪家好
  • 中学生制作的网站常平哪里有招计算机网站开发的
  • 原创网站模版苏州响应式网站建设
  • 做海报在哪个网站可以找素材网址申请注册方法
  • 网站建设分哪些类别别人做的网站不能用
  • 做网站网站会怎么样全国高校校园网站联盟建设
  • 整站下载器 做网站地图地产项目网站设计