这一原则的前提是你要知道什么是显式接口、运行期多态、隐式接口、编译期多态,现在我来解释一下。
这里说的接口不是interface,而是成员函数,更多的是public成员函数,它们在类中都有原型声明;virtual成员函数在非运行期的时候并不是一个实体成员函数,只有在运行期virtual函数才能确定自己的身份,这个就是运行期多态;与显式相对,隐式接口你看不见,它更多地是一种转换的机制;像什么函数的重载,泛型的具体化都是在编译期确定的,这个叫做编译期多态。
作者想强调的是在泛型编程中隐式接口和编译期多态重要。作者说显式接口是基于签名式,不过据我的理解,显示接口各方面都是确定的,它是去等待被调用。而隐式接口是不确定的,它等待的是一种条件的匹配,作者说是根据表达式,后来我想想这不还是条件的匹配嘛。泛型中的接口都是那种没有具体参数传进来就不确定的那种,而只要一个明确的参数传进来,那么泛型马上就具体化了,而这些都发生在编译期。
这一原则很简短,还是总结一下吧:
1、class和template都支持接口和多态;
2、class接口是显式的,以签名为中心多态性体现在virtual成员函数身上;
3、Template接口是隐式的,基于有效表达式,多态性表现在泛型具现化和函数重载解析,并且发生在编译期。
原则41:了解隐式接口和编译期多态
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...