3
|
Tim Diekmann suresh madaparthi · 技术社区 · 6 年前 |
![]() |
1
3
因为铁锈的仿制药系统是通过单菌根作用的。
诸如Rub和C++之类的语言使用泛型的单形化。对于类型参数的每个组合,调用一个泛型函数,生成专门的机器代码,用这些类型参数组合运行该函数。功能是 . 这允许将数据存储在适当的位置,消除了转换的成本,并允许泛型代码对该类型参数调用“静态”函数。
许多语言中的Trait对象(包括Rust)都是使用 函数表 垂直入口 . vtable条目是存储在不可变内存区域中的函数指针的集合,这些指针指向该特性方法的实现。因此,当对trait对象调用方法时,它会在vtable中查找实现的函数指针,然后间接跳转到该指针。 不幸的是,如果Rust编译器在编译时不知道实现该函数的代码,它就不能单形化函数,这就是在trait对象上调用方法时的情况。因此,不能对trait对象调用泛型函数(好吧,泛型覆盖类型)。 -编辑-
听起来你在问为什么
然而,Rust试图明确编译器正在做的事情,而这些隐式方法将与之背道而驰。对于初学者来说,尝试在trait对象上调用泛型函数而使其无法编译难道不是一件令人困惑的事情吗? 相反,锈让你 明确地
或者 明确地 使某些函数仅在静态分派时可用
|
![]() |
2
0
绑定使方法不安全。不是对象安全的特征不能用作类型。
另见: |
![]() |
newbie99 · 如何向字符串片段暗示特定数量的字节 2 年前 |
![]() |
David · `match的手臂类型不兼容 2 年前 |
![]() |
Lucas Lima · 如何打印对象的元素? 2 年前 |
![]() |
Xavi Font · 访问父结构中可选对象/结构/变量的属性 2 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |