浅谈thrift TVirtual*
2015-10-18 15:46
260 查看
thrift中的TVirtualTransport实现方式比较奇怪,没有用一般的方法——把函数定义成虚函数,来实现多态。这种实现我实在是想不出有什么好处,所以我就认为是作者故意在卖弄奇技淫巧。下面介绍它的原理:
其实上面代码的功能与下面是等价的:
更严重的是,thrift中的方法会有无限递归的问题
假设
没有指定DefatulBase,而且子类Derv忘记定义foo方法了,那么当多态时调用Base的foo,就会出现无限递归,thirft作者也想到了这一点,于是加了DefaultBase,
无限递柜最终会止于DefaultBase
class Base { public: void foo() { foo_virt(); } virtual void foo_virt(){} }
template<typename Devr, typename super = DefatulBase> class virtualDevr:public super { virtual void foo_virt() { static_cast<Devr *>(this)->foo(); } }
class Derv:public virtualDevr<Derv> { public: //foo is non-virtual void foo() { //do actual thing } }
其实上面代码的功能与下面是等价的:
class Base { public: virtual foo(){} } class Derv:public Base { public: foo() { // do actual thing } }
更严重的是,thrift中的方法会有无限递归的问题
假设
template<typename Devr, typename super = DefatulBase> Class virtualDevr:public super { virtual void foo_virt() { static_cast<Devr *>(this)->foo(); } }
没有指定DefatulBase,而且子类Derv忘记定义foo方法了,那么当多态时调用Base的foo,就会出现无限递归,thirft作者也想到了这一点,于是加了DefaultBase,
class DefaultBase: public Base { public: void foo() { //do some default action } }
无限递柜最终会止于DefaultBase
相关文章推荐
- 基于HBase Thrift接口的一些使用问题及相关注意事项的详解
- sparksql与hive整合
- 用thrift实现多语言相互调用
- Thrift的required和optional源码分析
- Python 通过thrift接口连接Hbase读取存储数据
- Apache Thrift原理及windows使用
- 运行apache thrift的错误解决
- PHP调用python
- ajax应用
- Thrift学习
- Thrift 实例 Helloworld
- Thirft框架介绍
- Ubuntu安装Thrift连接Hive
- Java版的各种Thrift server实现的比较
- 基于Thrift的高可用RPC开源项目
- ubuntu12.0 安装thrift 0.9 时 configure: error: "Error: libcrypto required."
- thrift non-blocking server在多线程下的处理流程
- thrift文件里头使用异常
- Intel Hadoop Distribution 2.5.1 HBase Thrift启动异常
- 30天了解30种技术系列---(9)可伸缩的跨语言服务开发框架Thrift