c++ 15个语言特性,C++语言的15个晦涩特性(4)

本文介绍了C++中模板元编程的两种应用:将函数作为模板参数以实现高效缓存,以及模板的模板参数来简化类型一致性。同时,讨论了函数内的try-catch块如何用于构造函数的异常安全。通过这些高级特性,开发者可以创建更加灵活和健壮的代码。
摘要由CSDN通过智能技术生成

函数作为模板参数

众所周知,模板参数可以是特定的整数也可以是特定的函数。这使得编译器在实例化模板代码时内联调用特定的函数以获得更高效的执行。下面的例子里,函数memoize的模板参数也是一个函数且只有新的参数值才通过函数调用(旧的参数值可以通过cache获得):

#include 

template

intmemoize(intx) {

staticstd::map cache;

std::map::iterator y = cache.find(x);

if(y != cache.end())returny->second;

returncache[x] = f(x);

}

intfib(intn) {

if(n 

returnmemoize(n - 1) + memoize(n - 2);

}

模板的参数也是模板

模板参数实际上自身的参数也可以是模板,这可以让你在实例化一个模板时可以不用模板参数就能够传递模板类型。看下面的代码:

template

structCache { ... };

template

structNetworkStore { ... };

template

structMemoryStore { ... };

template

structCachedStore {

Store store;

Cache cache;

};

CachedStore,int> a;

CachedStore,int> b;

CachedStore的cache存储的数据类型与store的类型相同。然而我们在实例化一个CachedStore必须重复写数据类型(上面的代码 是int型),store本身要写,CachedStore也要写,关键是我们这并不能保证两者的数据类型是一致的。我们真的只想要确定数据类型一次即 可,所以我们可以强制其不变,但是没有类型参数的列表会引起编译出错:

// 下面编译通不过,因为NetworkStore和MemoryStore缺失类型参数

CachedStore c;

CachedStore d;

模板的模板参数可以让我们获得想要的语法。注意你必须使用class关键字作为模板参数(他们自身的参数也是模板)

templateclassStore,typenameT>

structCachedStore2 {

Store store;

Cache cache;

};

CachedStore2 e;

CachedStore2 f;

try块作为函数

函数的try块会在检查构造函数的初始化列表时捕获抛出的异常。你不能在初始化列表的周围加上try-catch块,因为其只能出现在函数体外。为了解决这个问题,C++允许try-catch块也可作为函数体:

intf() {throw0; }

// 这里没有办法捕获由f()抛出的异常

structA {

inta;

A::A() : a(f()) {}

};

// 如果try-catch块被用作函数体并且初始化列表移至try关键字之后的话,

// 那么由f()抛出的异常就可以捕获到

structB {

intb;

B::B() try: b(f()) {

} catch(inte) {

}

};

奇怪的是,这种语法不仅仅局限于构造函数,也可用于其他的所有函数定义。

【编辑推荐】

【责任编辑:chensf TEL:(010)68476606】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值