济南营销型网站建设团队网站建设易尔通

张小明 2026/1/8 6:18:26
济南营销型网站建设团队,网站建设易尔通,小米发布会官网,三型布局的网站一、说明 c标准中提供了元编程接口std::integral_constant#xff0c;而在这个接口中又提供了针对bool类型的两个实例化类型#xff1a; true_type std::integral_constantbool, true false_type std::integral_constantbool, false在前面的文章分析中标准中提供了元编程接口std::integral_constant而在这个接口中又提供了针对bool类型的两个实例化类型true_type std::integral_constantbool,truefalse_type std::integral_constantbool,false在前面的文章分析中特别是针对std::index_sequence的相关文章中对其进行过介绍。另外在分析其它模板和元编程的过程中也对它们进行过顺便的应用说明。但对它们的应用并没有系统性的说明。本文将针对其实际应用的方式进行整体的总结说明。二、应用形式在模板或元编程中true_type和false_type基本有两种应用形式用作基类这种是最典型的情况比如前面的成员检测templatetypename T,typenamevoidstructcheckSize:std::false_type{};templatetypename TstructcheckSizeT,std::void_tdecltype(std::declvalT().size()):std::true_type{};而在元编程库中的很多接口都继承自它们比如std::is_pointer等templateclass Tstructis_pointer:std::false_type{};templateclass Tstructis_pointerT*:std::true_type{};templateclass Tstructis_pointerT*const:std::true_type{};templateclass Tstructis_pointerT*volatile:std::true_type{};templateclass Tstructis_pointerT*constvolatile:std::true_type{};在实际的开发中这种情况也是非常常见的。标签分发处理这种情况主要有函数重载处理、静态断言和条件编译#includeiostream#includetype_traits#includeutilitystructCopyType{};structMoveType{MoveType()default;MoveType(constMoveType)delete;MoveType(MoveType)default;};templatetypename TvoidtestFunc(T value,std::true_type){std::coutcall copy!std::endl;}templatetypename TvoidtestFunc(T value,std::false_type){std::coutcall move!std::endl;}templatetypename Tvoidprocess(T value){testFunc(std::forwardT(value),std::is_copy_constructibleT{});}intmain(){CopyType ct;process(ct);MoveType nct;process(std::move(nct));return0;}其它的实现也都类似不再过多列举。三、实现方法std::false_type和std::true_type是从std::integral_constant扩展而来的所以需要看integral_constant具体的实现templateclass T,T vstructintegral_constant{staticconstexpr T valuev;using value_typeT;using typeintegral_constant;// using injected-class-nameconstexpr operatorvalue_type()constnoexcept{returnvalue;}constexpr value_typeoperator()()constnoexcept{returnvalue;}// since c14};templatebool Busing bool_constantintegral_constantbool,B;using true_typeintegral_constantbool,true;using false_typeintegral_constantbool,false;大家可以尝试着用不同的方式来实现并进行工程验证。四、例程下面给出一个例程供大家分析#includeiostream#includetype_traits// 正确转换函数templatetypename F,typename TvoidcastType(constFfrom,Tto,std::true_type){tostatic_castT(from);std::coutcast ok!std::endl;}//错误处理函数templatetypename F,typename TvoidcastType(constFfrom,Tto,std::false_type){static_assert(std::is_convertibleF,T::value,convertible result);std::coutcast errorstd::endl;}templatetypename F,typename TvoidcastCheckRun(constFfrom,Tto){castType(from,to,std::is_convertibleF,T{});}intmain(){intd1;doubledd0.0;std::string strabc;castCheckRun(d,dd);//castCheckRun(d, str); //errorreturn0;}再看一下std::is_function的源码实现templateclassstructis_function:std::false_type{};// specialization for regular functionstemplateclass Ret,class...Argsstructis_functionRet(Args...):std::true_type{};// specialization for variadic functions such as std::printftemplateclass Ret,class...Argsstructis_functionRet(Args......):std::true_type{};// specialization for function types that have cv-qualifierstemplateclass Ret,class...Argsstructis_functionRet(Args...)const:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)volatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constvolatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)const:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)volatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constvolatile:std::true_type{};// specialization for function types that have ref-qualifierstemplateclass Ret,class...Argsstructis_functionRet(Args...):std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)const:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)volatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constvolatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......):std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)const:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)volatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constvolatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...):std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)const:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)volatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constvolatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......):std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)const:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)volatile:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constvolatile:std::true_type{};// specializations for noexcept versions of all the above (C17 and later)templateclass Ret,class...Argsstructis_functionRet(Args...)noexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)noexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constnoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)volatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constvolatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constnoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)volatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constvolatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)noexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constnoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)volatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constvolatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)noexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constnoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)volatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constvolatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)noexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constnoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)volatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args...)constvolatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)noexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constnoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)volatilenoexcept:std::true_type{};templateclass Ret,class...Argsstructis_functionRet(Args......)constvolatilenoexcept:std::true_type{};std::is_function处理的原理基本是函数类型对象不能有cv限定符且不能绑定到非const的左值引用可绑定到const的左传引用或右值引用。当然实际应用时一般是使用函数在地址转换时会隐式的转为函数指针。不过看上面的代码可以发现其实为了编译处理更简单就是靠量大管饱大量特化相关的函数判断即可。也可以这样理解通过模板偏特化partial specialization列出可能的全部函数类型签名形式对合法的函数类型进行std::true_type特化其它由非函数类型则由匹配主模板特化为 std::false_type。五、总结元编程和模板编程的复杂是大家公认的但只要大家从基础的知识点出发将不同的基础知识灵活运用起来再加上多看网上开源的好的工程代码就能够较快的掌握元编程和模板编程的技术。与诸君共勉
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做钓鱼网站的公司网站新闻中心模版

Vivado安装后第一件事:这样配置才能高效入门FPGA开发你刚装好Vivado,点开界面却发现仿真器找不到、IP核灰着用不了、编译慢得像卡顿的视频——这不是电脑性能问题,而是基础环境没调对。很多初学者以为“能启动”就算完成安装,结果…

张小明 2026/1/7 20:32:19 网站建设

htm网站开发 实训软件如何开发

3步掌握Android组件化:从零搭建模块化架构 【免费下载链接】hll-wp-therouter-android A framework for assisting in the renovation of Android componentization(帮助 App 进行组件化改造的动态路由框架) 项目地址: https://gitcode.com/gh_mirrors/hl/hll-wp-…

张小明 2026/1/7 20:32:20 网站建设

浅谈博星卓越网站建设ui设计公司官网

测试周报自动化转型的迫切性‌ 每周一,对于许多测试工程师而言,可能都是从整理上周的“数据残骸”开始:打开不同的浏览器标签页,登录Jira查看新增缺陷和待关闭的BUG,翻阅Git提交记录寻找与测试关联的代码变更&#xff…

张小明 2026/1/7 20:32:19 网站建设

关于做ppt的网站网站内容建设注意事项

第一章:跨域时代的核心挑战与Cookie安全传递的必要性在现代Web应用架构中,前端与后端服务常常部署在不同的域名下,形成典型的跨域场景。这种分离提升了系统的可维护性和扩展性,但也带来了身份认证与状态管理的新挑战。其中&#x…

张小明 2026/1/7 20:32:20 网站建设

网站免费模板wordpress文字博客主题

Vue3项目开发实战指南:构建代码美化工具全流程解析 【免费下载链接】chalk.ist 📷 Create beautiful images of your source code 项目地址: https://gitcode.com/gh_mirrors/ch/chalk.ist Vue3项目开发教程在现代前端开发中占据着重要地位&#…

张小明 2026/1/6 21:45:12 网站建设

做婚庆网站的想法怎么建网页

你是否在开发UI界面时遇到过这样的困扰:用户想要选择文本,但你的应用却无法提供流畅的交互体验?从鼠标按下到选区渲染,每个环节都需要精准处理。本文将带你深入探讨在C语言高性能UI库中实现文本选择功能的核心技术,让你…

张小明 2026/1/6 23:39:20 网站建设