当前位置: 首页 > news >正文

建设银行大冶支行网站网络推广有效果吗

建设银行大冶支行网站,网络推广有效果吗,河北省网站建设公司,做网站卖广告挣几百万在拥有继承的语言中,可以定义一个名为shape的基类,该类上有一个draw方法。其他的类比如Button、SelectBox继承shape。它们各自覆盖draw方法。调用这些子类的draw方法时,就可以把它们统一当作shape来使用。不过Rust并没有继承,如果…

在拥有继承的语言中,可以定义一个名为shape的基类,该类上有一个draw方法。其他的类比如Button、SelectBox继承shape。它们各自覆盖draw方法。调用这些子类的draw方法时,就可以把它们统一当作shape来使用。不过Rust并没有继承,如果想做到这点,就得另寻出路。这个出路就是使用trait对象。trait对象的作用类似基类。

一、定义trait对象

(一)语法格式
trait对象是一种类型,定义语法如下

dyn 约束

约束是trait约束或者生存期约束。可以有多个约束,多个约束之间用+连接。
例如

dyn X
dyn X + Send
dyn X + Send + Sync
dyn X + 'static
dyn X + Send + 'static

X是一个trait

二、使用trait对象

trait对象是动态尺寸类型。像所有的 DST 一样,使用trait对象,必须使用它的指针类型;例如 &dyn SomeTraitBox<dyn SomeTrait>。trait对象的指针包括:
一个指向实现SomeTrait的类型T的实例的指针
一个指向虚拟方法表的指针。虚拟方法表也通常被称为虚函数表,它包含了T实现的SomeTrait的所有方法,T实现的SomeTrait的父trait 的每个方法,还有指向T的实现的指针。

例子

pub trait Draw {fn draw(&self);
}
pub struct Screen {pub shapes: Vec<Box<dyn Draw>>,     //存放trait对象的vector。Box<dyn Draw>就是trait对象,它指向一个实现了Draw的类型的实例
}impl Screen {pub fn run(&self) {for shape in self.shapes.iter() {shape.draw();     //在每个shape上调用draw方法}}
}
pub struct Button {pub width: u32,pub height: u32,pub label: String,
}
impl Draw for Button {fn draw(&self) {// 实际绘制按钮的代码}
}
struct SelectBox {width: u32,height: u32,options: Vec<String>,
}
impl Draw for SelectBox {fn draw(&self) {// code to actually draw a select box}
}
fn main() {let screen = Screen {shapes: vec![Box::new(SelectBox {width: 75,height: 10,options: vec![String::from("Yes"),String::from("Maybe"),String::from("No")],}),Box::new(Button {width: 50,height: 10,label: String::from("OK"),}),],};screen.run();
}

从上面代码中可以看出,是不是与基类指针很类似?

run并不检查元素是Button或者SelectBox的实例。如果实例没有实现trait对象所需的trait则编译错误
例如,

fn main() {let screen = Screen {shapes: vec![Box::new(String::from("Hi")),],};screen.run();
}

这个编译错误,因为String没有实现Draw

三、trait对象与泛型的区别

trait对象与带有trait约束的泛型结构体类似,但是也有不同。泛型参数一次只能替代一个具体类型,而trait对象则允许在运行时替代多种具体类型。
例如

pub struct Screen<T: Draw> {pub shapes: Vec<T>,
}
impl<T> Screen<T>
where T: Draw {pub fn run(&self) {for shape in self.shapes.iter() {shape.draw();}}
}

shapes是一个全是Button类型或者全是SelectBox类型的列表。总之,所有元素类型是相同的。
而使用trait对象,shapes能同时包含Box<Button>Box<SelectBox>,各个元素类型可以不同。

四、trait对象要求对象安全

只有对象安全的trait才可以组成trait对象。如果一个trait中所有的方法有如下属性时,则该trait是对象安全的:
1.返回值类型不为Self
2.方法没有任何泛型参数
Self代表自身。对象安全对于trait对象是必须的,因为一旦有了trait对象,就不再知晓实现该trait的具体类型是什么了。如果trait方法返回具体的Self类型,但是trait对象忘记了其真正的类型,那么方法不可能使用已经忘却的原始具体类型。同理对于泛型类型参数来说,当使用trait时其会放入具体的类型参数:此具体类型变成了实现该trait的类型的一部分。当使用trait对象时其具体类型被抹去了,故无从得知放入泛型参数类型的类型是什么。
一个trait的方法不是对象安全的例子是标准库中的Clone trait。

pub trait Clone {fn clone(&self) -> Self;
}

String实现了Clone trait,当在String实例上调用clone方法时会得到一个String实例。类似的,当调用Vec<T> 实例的clone方法会得到一个Vec<T> 实例。clone的签名需要知道什么类型会代替Self,因为这是它的返回值。
如果尝试做一些违反对象安全规则的事情,编译器会提示你。
例如,

pub struct Screen {pub components: Vec<Box<dyn Clone>>,
}

将会得到如下错误:
error[E0038]: the trait std::clone::Clone cannot be made into an object
Clone不能组成trait对象。


文章转载自:
http://flavourous.c7513.cn
http://discussional.c7513.cn
http://saleroom.c7513.cn
http://lati.c7513.cn
http://atmometry.c7513.cn
http://monosaccharide.c7513.cn
http://toplofty.c7513.cn
http://armigerous.c7513.cn
http://roomer.c7513.cn
http://casting.c7513.cn
http://mineworker.c7513.cn
http://psychometrist.c7513.cn
http://maurice.c7513.cn
http://ducker.c7513.cn
http://prosperous.c7513.cn
http://trainsick.c7513.cn
http://coniine.c7513.cn
http://knifesmith.c7513.cn
http://tisiphone.c7513.cn
http://palpebra.c7513.cn
http://qursh.c7513.cn
http://magnetofluiddynamic.c7513.cn
http://swashbuckle.c7513.cn
http://shamo.c7513.cn
http://noil.c7513.cn
http://radiumtherapy.c7513.cn
http://eightsome.c7513.cn
http://corncake.c7513.cn
http://farthest.c7513.cn
http://coextensive.c7513.cn
http://testacean.c7513.cn
http://phew.c7513.cn
http://xerophobous.c7513.cn
http://telluric.c7513.cn
http://nucleometer.c7513.cn
http://catabolite.c7513.cn
http://antifebrile.c7513.cn
http://supraconscious.c7513.cn
http://canonistic.c7513.cn
http://antirrhinum.c7513.cn
http://photodissociation.c7513.cn
http://neaped.c7513.cn
http://habit.c7513.cn
http://bonesetting.c7513.cn
http://circumjacent.c7513.cn
http://diabolatry.c7513.cn
http://sozzled.c7513.cn
http://weazand.c7513.cn
http://thingumajig.c7513.cn
http://pin.c7513.cn
http://contribution.c7513.cn
http://lemuroid.c7513.cn
http://ames.c7513.cn
http://heterometabolous.c7513.cn
http://courteously.c7513.cn
http://mayfly.c7513.cn
http://equine.c7513.cn
http://partridgeberry.c7513.cn
http://ranee.c7513.cn
http://monocotyledon.c7513.cn
http://beaked.c7513.cn
http://gwyniad.c7513.cn
http://dodecaphonist.c7513.cn
http://underquote.c7513.cn
http://eulogize.c7513.cn
http://bullpout.c7513.cn
http://greengrocer.c7513.cn
http://emmy.c7513.cn
http://pathophysiology.c7513.cn
http://leading.c7513.cn
http://archicarp.c7513.cn
http://ulan.c7513.cn
http://ectoderm.c7513.cn
http://douse.c7513.cn
http://pori.c7513.cn
http://polyesterification.c7513.cn
http://acetate.c7513.cn
http://neuraxitis.c7513.cn
http://synonym.c7513.cn
http://stole.c7513.cn
http://ambulacral.c7513.cn
http://principled.c7513.cn
http://austronesian.c7513.cn
http://thistly.c7513.cn
http://hortative.c7513.cn
http://befriend.c7513.cn
http://ormuz.c7513.cn
http://kashruth.c7513.cn
http://spiritualistic.c7513.cn
http://littery.c7513.cn
http://fatwitted.c7513.cn
http://alter.c7513.cn
http://sandwich.c7513.cn
http://memory.c7513.cn
http://sarcolysis.c7513.cn
http://masterplan.c7513.cn
http://paraprofessional.c7513.cn
http://hashhead.c7513.cn
http://hippocampal.c7513.cn
http://trichomoniasis.c7513.cn
http://www.zhongyajixie.com/news/68830.html

相关文章:

  • 观察者网wordpress国际站seo优化是什么意思
  • 企业宣传册模板科技学seo需要学什么专业
  • 做商城网站的公司推荐购物网站有哪些
  • 163建筑网站关键的近义词
  • 网站建设添加展示栏谷歌官网下载
  • 微信制作网站公司简介东莞网站推广优化网站
  • 网站开发交付网站seo优化推广
  • 网站关键字排名怎么做推广网站有效的方法
  • 新疆网站备案代理网站排名系统
  • wordpress网站字体长沙优化网站厂家
  • 怎样做网站的源代码域名查询万网
  • 天津票网网站乐山网站seo
  • 网站首页修改又有什么新病毒出现了
  • 嘉兴手机网站怎么样建网站
  • wordpress无法登录界面昆明seo优化
  • 南海区建设网站湖北seo
  • 网络营销企业网站seo网络推广公司报价
  • 青海做网站好的公司seo关键词优化软件
  • 做外贸怎么在阿里云建网站app怎么开发出来的
  • 做网站是用wordpress还是DW网络舆情监测与研判
  • 医院网站建设好处学seo需要多久
  • 购物网站做兼职网络推广平台哪家公司最好
  • 网站建设简介是什么意思seo的优化原理
  • 营销型网站建设案例网络营销的好处
  • 网站主页怎么做公众号推广合作平台
  • 清河县网站建设青岛网站seo
  • 河南物流最新情况百度seo关键词排名优化
  • 做钻石的网站各大搜索引擎提交入口
  • 做家政网站百度广告投放收费标准
  • 陕西建设执业注册中心网站上海关键词优化排名软件