模板用于解耦

陈硕的题和解决方法:

一道 C++ 思考题:std::string 的 operator << 和 operator >> 是如何声明的,如何避免与 iostream 的过度耦合?iostream 和 string 都可以单独 include 来使用,显然 iostream 头文件里不会定义 string 的 << 和 >> 操作。那么 string 头文件里会不会为了定义 << 和 >> 而 include iostream 呢?

C++ 对此有一个解决办法,写一个 non-member non-friend 且与 class 位于同一 namespace 的 templated operator <<,并且把操作转发给 class member function 'writeTo',后者可能本身是个 template,这样可以避免耦合到 iostream。


泛型编程原意是用通用的代码应用不同类型,这里是铁定只有一种类型的情况下用于解耦。<<算是应用于两个运算元的操作符,一个是string,一个iostream。你在使用string的时候不一定用到iostream,使用iostream的时候不一定用到string,又要求必须支持iostream对string的<<操作。这时候自然要解耦了,这里模板只是为了解耦,不是为了泛型算法,因为需要支持iostream而不是多种类型。



另外,c++中某个函数内通过一个接口,必须要接受实现这个接口的类作为参数;或者有些是访问变量,这个类必须声明了这个变量。

int a(const A* pa)
{
       pa->b();
}
而动态语言,比如as、lua,不会做严格类型检查,不需要事先声明,只要运行时接收的object有这个属性就可以了。

c++中可以通过模板实现这种要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值