C++模板语法类似于Python、JavaScript等动态类型语言

本文介绍了C++模板语法,C++的模板类型是泛类型,模板是对类型的重载。模板语句编译时不进行名字查找,“具象化”后会查找,找不到则报错,这与动态类型语言类似。C++底层部分功能用了模板语法,使用时需提供相关方法和属性。

C++定义的class T模板类型就是泛类型,模板类型会在被"具象化"之后变成确定类型,所以模板就是对类型的重载,类似于函数对形参类型和形参数量的重载。使用了模板的语句可以对模板类型的实例(T obj=T();obj.method(obj.attr);)或者模板类型的静态方法(T::StaticMethod();)调用"开发者确认具有的属性与方法",编译不会对模板方法进行名字查找,因为是模板类型,没有被"具象化",何谈名字查找,所以模板类型的实例的任何属性名、方法名都可以随意。但一旦使用了("具象"了)模板类型,那么编译就会对"具象"后的模板调用进行名字查找,如果找不到"具象"类型的静态方法、"具象"类型实例的实例方法与实例属性,那就会报错。这和Python与JavaScript等动态类型语言的"调用时LEGB名字查找,找不到则出错"的机制类似。

总结:C++模板语法就是实现了动态类型,模板语句本身的编译不会进行名字查找,而一旦"具象化"模板类型,也就是使用了模板类型,那么编译就会对使用了模板类型的语句中的名字,到"具象化"的类型中进行名字查找(包括类静态方法、实例方法、实例属性),如果名字查找没找到,就报错。

本人低劣的C++开发水平很少使用模板语法,但C++底层对vector、map、set、std::swap等都使用了模板语法,在使用这些模板语法时开发者要提供模板中引用了的类静态方法、实例方法和实例属性,否则会名字查找失败。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值