AsRef模拟Atl里的继承关系
来源:互联网 发布:21天学通c语言app 编辑:程序博客网 时间:2024/06/04 19:47
用AsRef模拟atl的继承方法
代码有点长,这个是模拟atl里某个类可以从TBase继承或者从TBase的子类继承(一般TBase就是CWindow)
AsRef是一个目前相对比较方便的引用类型转换的方法
#[derive(Debug)]struct CWin{ d: i32,}impl New for CWin{ fn new()->CWin { CWin{ d:400, } }}#[derive(Debug)]struct Foo{ cwin: CWin, d:i32,}impl AsRef<CWin> for CWin{ fn as_ref(&self)->&CWin{ self }}impl New for Foo{ fn new()->Foo { Foo{ d:100, cwin: CWin{d:200}, } }}impl AsRef<CWin> for Foo{ fn as_ref(&self)->&CWin{ &self.cwin }}fn foo<T: AsRef<CWin>>(t: &T){ let c = t.as_ref(); println!("{}",c.d);}#[derive(Debug)]struct Bar<T: AsRef<CWin>>{ t: T, d: i32,}trait New { fn new()->Self;}impl<T: AsRef<CWin> + New> Bar<T> { fn print(&self){ let c = self.t.as_ref(); println!("{}",c.d); } fn new()->Bar<T>{ Bar{ t: T::new(), d:300, } }}type FooBar = Bar<Foo>;type WinBar = Bar<CWin>;fn main(){ // 直接使用as_ref let f = Foo::new(); foo(&f); let fb = FooBar::new(); fb.print(); println!("{:?}",fb); let wb = WinBar::new(); wb.print(); println!("{:?}",wb);}
https://play.rust-lang.org/?gist=5c82dbbb0316fa7f73d8&version=stable
0 0
- AsRef模拟Atl里的继承关系
- ATL 的继承链处理
- ATL里数组的打包和解包
- Hibernate的继承关系
- Hibernate的继承关系
- C++的继承关系
- C++的继承关系
- 继承关系的映射
- Adapter的继承关系
- 继承的关系图!
- hibernate的继承关系
- log4j的继承关系
- 继承的关系
- JAVA的继承关系
- PullToRefresh 的继承关系
- 继承的关系
- Hibernate的继承关系
- 集合的继承关系
- Kalman(卡尔曼)滤波器的理解
- Linux RPM 命令参数使用详解
- 每个Android开发者都应该了解的资源列表
- git代码库回滚
- Maven - 下载JAR包
- AsRef模拟Atl里的继承关系
- Spring 配置时一些问题
- object-C语言特性(一)
- Adroid开发之解析xml数据的两种方式
- Spring:整合JPA
- Hadoop学习路线图
- Android开发者网址导航
- 一台服务器安装运行多个Tomcat及注册服务
- Android Studio调试功能使用总结