雅虎香港 搜尋

搜尋結果

  1. 2024年4月4日 · traits干更多东西. 迭代器有常见有五种类型: value_type, difference_type, reference_type, pointer_type都比较容易在 traits 和 相应偏特化中提取。. 但是, iterator_category 一般也有5个,这个相应型别会引发较大规模的写代码工程。. 例如,我们实现了 func_II, func_BI, func ...

  2. 本文介绍如何定义一个 traits类 ,以及如何使用它在编译器获取数据类型. C++中的 Traits 类可以在编译期提供类型信息,它是用 Traits 模板及其特化来实现的。. 通过方法的重载,可以在编译期对类型进行"if…else"判断。. 我们通过STL中的一个例子来介绍 Traits 的实现 ...

  3. 大致的意思是: 不能对外部的类型实现外部的 trait 。 举个例子,不能在我们的代码/库里为Vec实现Display trait,因为二者都是 标准库 ,相对于你的代码而言是外部的。 这个限制是为了“一致性”或可以称为“孤儿原则”。 这个原则可以保证别人用你库的时候不会破坏你库里函数的功能(同理,你不能破坏标准库函数的功能)。 其实就是防止你同时修改一个外部库的type和它自带的trait,这不是很好理解么。 举个例子,假如你在你的代码里为string实现了一个trait “from”,原版可以直接把&str转为string,假设你实现的时候把& str 的两边空白去掉再转为string。 那么编译器会不知道到底该遵循哪个 trait函数 来转化&str。

  4. 2023年2月2日 · 29. 被浏览. 15,574. 7 个回答. 默认排序. 知乎用户. 134 人赞同了该回答. 目录. impl Trait 和 dyn Trait 区别可大了: 编译时多态 (compile-time polymorphism)与 运行时多态 ( run-time polymorphism )的区别。 这个话题展开了讲其实内容很多,我就简单写写 [1] ,进一步了解可以自行根据关键字去查。 注:这两个术语有时也称作静态/动态多态(static/dynamic polymorphism)/动态分派(dynamic dispatch)等,都是差不多的概念。 免责声明.

  5. 2015年7月22日 · 165 人赞同了该回答. 在C++11移除Concept的时候,Michael Wong 曾经说过一句话 :"I am sure this will not be the last we will hear of it." 而在C++17加入Concept的时候,Eric Niebler发了这么一条Twitter. 对于C++的Concept来说,其核心观点就在于对模板参数进行约束,抽象出来了一个Concept赋予模板参数进行约束(而我更认为是有了一层"类型系统"),例子可以参见我这里的一个回答. 电脑发展史上有哪些伟大的思想和技术? - 蓝色的回答. ,而有了这层“类型系统”以后,你就可以如普通的类型一样,进行类型重载,如.

  6. 83. 被浏览. 28,375. 8 个回答. 默认排序. FancyFlame. 大三 / 前端开发 / Rust教徒. 谢邀 @多云. 25 人赞同了该回答. 先说 如何理解 : 下面的意思是: 对于函数外指定的特定生命周期'a,T实现了Trait<'a> fn foo<'a, T>() where T: Trait<'a> ; 下面的意思是: 对于任意生命周期'a,T都实现了Trait<'a> fn foo<T> where T: for<'a> Trait<'a> ; 这就是HRTB的意思。 书中的例子可能不那么接近实际用途。 考虑下面的例子: fn say_some<'a>(name: String) -> impl Fn(&str) {

  7. 2022年11月26日 · 关注者. 8. 被浏览. 6,764. 5 个回答. 默认排序. 灰色的男孩. 厕所清洁工. 用dyn Any的downcast方法. 首先你的struct需要需要有一个as_any ()之类的方法,用来把自己转换成Any. pub trait Downcast { fn as_any_mut(&mut self) -> &mut dyn Any; fn into_any(self: Box<Self>) -> Box<dyn Any>; } pub trait YourTrait: Downcast { fn hello(&self); } 给你的结构体实现这几个trait.