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

响应式网站 框架个人网站如何建立

响应式网站 框架,个人网站如何建立,山东网站制作应用,发稿吧1、基础语法 在 C 中#xff0c;templatetypename Func, typename void 这一模板声明不仅仅限于函数模板#xff0c;它在类模板中同样具有强大的应用。结合 SFINAE#xff08;Substitution Failure Is Not An Error#xff09;和 类型特征#xff08;type trait…1、基础语法 在 C 中templatetypename Func, typename void 这一模板声明不仅仅限于函数模板它在类模板中同样具有强大的应用。结合 SFINAESubstitution Failure Is Not An Error和 类型特征type traits我们可以根据类型特征如是否可调用、是否为某种类型等来实现不同的类特化从而使得我们的代码更加灵活、可扩展。 在类模板中templatetypename Func, typename void 的基本结构类似于函数模板但其作用是为类提供更强的类型约束和灵活性。例如 templatetypename Func, typename void class MyClass { public:void call(Func f) {// Generic behavior} };这里templatetypename Func, typename void 表示 MyClass 是一个模板类它接受一个类型参数 Func第二个模板参数 void 是默认值。该类可以根据不同类型的 Func 做出不同的行为而 void 通常用于与 SFINAE 机制配合决定是否允许某些特定的类型实例化该类模板。 2、类模板的默认类型参数简化和泛化 与函数模板类似templatetypename Func, typename void 在类模板中的一个常见用途是通过默认类型参数简化模板声明。我们通常使用第二个类型参数 void 来启用某些特化或重载这通常结合 SFINAE 使用。通过这种方式模板类在默认情况下为某些类型提供通用行为而在遇到特定类型时可以提供特化的行为。假设我们希望在类模板 MyClass 中提供一个 call 成员函数当 Func 是可调用类型时执行该函数而如果 Func 不是可调用类型则提供默认行为代码如下 #include iostream #include type_traitstemplatetypename Func, typename void class MyClass { public:void call(Func f) {std::cout Generic version of call std::endl;} };// 特化版本当 Func 是可调用类型时 templatetypename Func class MyClassFunc, typename std::enable_ifstd::is_invocableFunc::value::type { public:void call(Func f) {std::cout Callable function version of call std::endl;f(); // 执行传入的可调用对象} };void test_func() {std::cout test_func executed! std::endl; }int main() {MyClassint obj1;obj1.call(42); // 输出: Generic version of callMyClassvoid(*)() obj2;obj2.call(test_func); // 输出: Callable function version of call// test_func executed! }通用版本当 Func 不是可调用类型时MyClassFunc, typename void 使用默认版本的 call 函数输出 “Generic version of call”。特化版本当 Func 是可调用类型时我们通过 std::enable_if 和 std::is_invocable 来限制模板实例化使得编译器选择特化版本的 call在这种情况下我们可以直接调用 f() 来执行传入的可调用对象。 3、SFINAE类模板中根据类型特征选择特化 templatetypename Func, typename void 还常常与 SFINAE 结合使用来根据类型的不同提供不同的实现。SFINAE 机制允许在类型不匹配时编译器不报错而是选择其他合适的模板特化或重载版本。可以使用该技术根据类型特征提供不同的成员函数我们将使用 std::is_integral 和 std::is_floating_point 类型特征来为整数类型和浮动类型提供不同的处理方法 #include iostream #include type_traitstemplatetypename T, typename void class MyClass { public:void print() {std::cout Generic version: Unknown type std::endl;} };// 特化版本当 T 是整数类型时 templatetypename T class MyClassT, typename std::enable_ifstd::is_integralT::value::type { public:void print() {std::cout Integer version: sizeof(T) bytes std::endl;} };// 特化版本当 T 是浮动类型时 templatetypename T class MyClassT, typename std::enable_ifstd::is_floating_pointT::value::type { public:void print() {std::cout Floating point version: sizeof(T) bytes std::endl;} };int main() {MyClassint obj1;obj1.print(); // 输出: Integer version: 4 bytesMyClassdouble obj2;obj2.print(); // 输出: Floating point version: 8 bytesMyClassstd::string obj3;obj3.print(); // 输出: Generic version: Unknown type }通用版本对于非整数和非浮动类型MyClass 使用通用版本的 print 成员函数。整数类型特化当 T 是整数类型时使用特化版本的 print输出整数类型的大小以字节为单位。浮动类型特化当 T 是浮动类型时使用特化版本的 print输出浮动类型的大小。 4、利用 void 实现类型推导和重载 通过使用 templatetypename Func, typename void我们可以根据传入类型的特性来推导不同的行为。 void 作为一个默认模板参数可以帮助我们更好地控制模板重载和特化的匹配尤其是在类模板中结合其他模板参数进行推导时。 #include iostream #include type_traitstemplatetypename T, typename void class MyClass { public:void foo() {std::cout Generic version of foo std::endl;} };// 特化版本当 T 是指针类型时 templatetypename T class MyClassT, typename std::enable_ifstd::is_pointerT::value::type { public:void foo() {std::cout Pointer type version of foo std::endl;} };int main() {MyClassint obj1;obj1.foo(); // 输出: Generic version of fooMyClassint* obj2;obj2.foo(); // 输出: Pointer type version of foo }通用版本对于普通类型 TMyClass 使用通用版本的 foo 成员函数。指针类型特化当 T 是指针类型时MyClass 使用特化版本的 foo 成员函数。 5、结合 std::enable_if 和 std::is_same 实现类型限制 void 还常常与 std::enable_if 和 std::is_same 等类型特征配合使用限制模板类的实例化提供更加灵活的行为。 #include iostream #include type_traitstemplatetypename T, typename void class MyClass { public:void print() {std::cout Generic print std::endl;} };// 当 T 是 int 时使用特化版本 templatetypename T class MyClassT, typename std::enable_ifstd::is_sameT, int::value::type { public:void print() {std::cout Specialized print for int std::endl;} };int main() {MyClassdouble obj1;obj1.print(); // 输出: Generic printMyClassint obj2;obj2.print(); // 输出: Specialized print for int }6、总结 templatetypename Func, typename void 在类模板中的应用充分体现了 C 模板编程的灵活性。通过使用默认模板参数和与 SFINAE 相结合的机制我们可以实现基于类型特征的模板特化和重载使得代码更加通用、简洁且具备高度的可扩展性。
http://www.hkea.cn/news/14336458/

相关文章:

  • 加强网站内容建设的意见google付费推广
  • 建国外网站宝安建设工程交易服务网
  • 导航网站模板免费赣州市九一人才网手机版
  • 住房城市建设网站长沙好的网站建设公司
  • 网站开发报告样式外贸营销网
  • asp.net 网站 相册建设网站的情况说明
  • 搜狐最大的门户网站舟山网络公司网站建设公司
  • 制作网站软件app山东省农村电影监控平台下载
  • 怀化做网站ui网页设计成都培训
  • 绍兴微网站建设电子商务网站系统规划
  • 营销型网站开发做seo排名好的公司
  • 网站用户体验准则凭祥网站建设
  • 下载wordpress很慢安卓优化大师全部版本
  • 怎么做企业网站二维码济南网络建站模板
  • 杭州省建设厅网站wordpress qps
  • 东莞软件网站推广wordpress如何使用父导航可点击
  • 四川网站建设咨询备案成功后怎么建设网站
  • 个人备案做门户网站国外校园网站建设
  • 企业管理咨询顾问长沙网站seo优化
  • 青岛房地产网站建设珠海 网站建设
  • 网站的基础建设项目wordpress 后台演示
  • 深圳好点的网站建设公司建设部2018年工作要点网站
  • 螺旋钢管网站建设WordPress成绩查询
  • 做的网站一模一样会被告吗企业网站推广的方法有哪几种
  • flask 简易网站开发一个备案可以做几个网站
  • 长春公司做网站找哪个公司好黑龙江住房和城乡建设网
  • 马云做网站最早企业vi手册
  • 网站网站代理可以做不为什么电脑打开那个做网站都是那一个
  • 网站常用特效网站建设论文500字
  • 网站广告代码app源码下载