如何在 Rust 中转换泛型原始类型? [复制]

2024-04-11

我想写如下内容:

pub struct Point<T> {
    pub x: T,
    pub y: T,
}

impl<T> Point<T> {
    pub fn from<U>(other: Point<U>) -> Point<T> {
        Point {
            x: other.x as T,
            y: other as T,
        }
    }
}

这不可能:

error[E0605]: non-primitive cast: `U` as `T`
 --> src/lib.rs:9:16
  |
9 |             x: other.x as T,
  |                ^^^^^^^^^^^^
  |
  = note: an `as` expression can only be used to convert between primitive types. Consider using the `From` trait

看着如果我知道这是可能的,如何将通用 T 转换为 f32? https://stackoverflow.com/questions/35766261/how-do-i-cast-generic-t-to-f32-if-i-know-that-its-possible,我了解到From特质不适用于i32 to f32转换,这就是我最初想要的。

我能想到的最简单的解决方案是编写一个如下函数:

pub fn float2_from_int2(v: Point<i32>) -> Point<f32> {
   Point::<f32>::new(v.x as f32, v.y as f32)
}

显然 Rust 没有任何问题i32 to f32。有更好的方法来写这个吗?


您可以使用到原语 https://docs.rs/num/0.2.0/num/trait.ToPrimitive.html特质来自num https://crates.io/crates/num
示例(您可以避免使用 AsPrimitive 选项):

pub struct Point<T> {
    pub x: T,
    pub y: T,
}

impl<T: Copy + 'static> Point<T> {
    pub fn from<U: num::cast::AsPrimitive<T>>(other: Point<U>) -> Point<T> {
        Point {
            x: other.x.as_(),
            y: other.y.as_(),
        }
    }
}

fn do_stuff() {
    let a = Point{x: 0i32, y: 0i32};
    let b = Point::<f32>::from(a);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Rust 中转换泛型原始类型? [复制] 的相关文章

随机推荐

  • 从 JavaScript 访问 DIV 元素

    这是以下 DIV 结构 div class demo div div div div div div div 如何从 JavaScript 访问 tabs 2 var plot2 jqplot tabs 2 points 此 JavaScr
  • 在哪里可以找到英语短语列表? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的任务是搜索文本中陈词滥调和常见短语的用法 这些短语与您在财富之轮的短语谜题中可能看到的短语类似 这
  • 自定义 Visual Studio 起始页

    有没有办法自定义 VS 2008 起始页 我想显示一个网站 Sharepoint 站点 而不是新闻源 但我找不到解决方案 Update 关于卡什回答 https stackoverflow com questions 553392 cust
  • iOS8 中的应用内购买收据验证

    我们正在遵循 raywenderlinch 教程http www raywenderlich com 23266 in app purchases in ios 6 tutorial consumables and receipt vali
  • 更改 Rack Middleware 中的 response.body

    我正在尝试为 Rails 4 2 应用程序编写一些机架中间件 该中间件使用以下命令更改响应正文gsub方法 我发现使用这样的模式的旧示例 class MyMiddleware def initialize app app app end d
  • JavaScript:从其中获取完全限定的函数名称?

    看看下面的片段 有没有我可以写的函数来代替 生成可以在另一个函数中重用的路线 就像是var route this show fullyQualifiedName也许 var services github com api v2 json r
  • 从特定的起始位置获取选项?

    我有一个这样的选择
  • C++读取二进制文件

    我想了解如何在 C 中读取二进制文件 我的代码 int main ifstream ifd input png ios binary ios ate int size ifd tellg ifd seekg 0 ios beg vector
  • Jetty 8.1 用“Dispatched Failed”消息淹没日志文件

    我们使用 Jetty 8 1 作为嵌入式 HTTP 服务器 在过载情况下 服务器有时会开始用以下消息淹没日志文件 warn java util concurrent RejectedExecutionException warn Dispa
  • std::find 的优点

    使用 C 11 有什么优势吗std find超过一个容器的find method 如果是std vector 其中没有find方法 确实std find使用一些智能算法或简单地迭代每个元素的天真的方法 如果是std map看来你需要传递一个
  • 在python 3.5上安装pygame时出现权限错误

    当我安装时pygame 1 9 2a0 cp35 none win32 whl对于 python 3 5 我收到权限错误 PermissionError WinError 5 Access is denied 然后它说错误出现在 pygam
  • OleDbDataReader 如何读取数字类型?

    尝试从中读取数据 XLS 文件 我能够读取所有单元格字符串 但是无法读取数字在细胞中 我尝试使用 ToString 方法但没有成功 取回数据库null Code public xlsConverter string excelFilePat
  • Rust 的一步步交互式调试器?

    如何逐步调试 Rust 应用程序交互地就像我可以在 Ruby 中 撬开 一样 我希望能够在到达断点时实时查看并最好更改变量 是否有已完成生产的项目 我发现具有良好的可用性VS Code https code visualstudio com
  • 用于 LIFX 电源开/关的 PHP HTTP CURL PUT 请求

    我正在尝试使用 PHP 打开 关闭所有 Lifx 灯泡 API 文档 http developer lifx com http developer lifx com 表示使用 PUT 请求 curl u c87c73a896b554367f
  • 在特定命名空间中定义函数

    我创建了一个包 mypackage 附加了命名空间 mypackage 在这个包中有一个函数 我可以使用它来调用 myfunction or mypackage myfunction 现在我想用另一个版本 更新 替换 myfunction
  • 加载从跨文档消息传递中作为 event.data 获得的 pdf

    对于知道答案的人来说很简单 我的代码通过跨文档消息传递成功从网站下载 pdf 但是 我现在想在浏览器中显示 pdf 可能是在 iframe 或数据对象中 可能我需要知道 pdf 下载后存储的本地 URL 请帮忙 可能很简单 看这里的小提琴
  • 使用Esapi验证时出错

    我希望有人能帮助我解决一些问题 我正在将 OWASP ESAPI 2 1 0 与 JavaEE 结合使用 以帮助我验证 Web 应用程序中的某些条目 在某些时候 我需要验证 Windows 文件路径 因此我在 validation prop
  • 正则表达式按模式的最后一次出现分割字符串

    我正在使用正则表达式来分割字符串
  • 无法绑定到“ngValue”,因为它不是“option”的已知属性

    我正在尝试实施select在 Angular 5 中 但我不断得到这个 我已经尝试了很多 StackOverflow 问题 唯一的区别是 我的组件位于应用程序内的另一个模块内 该模块最终注入到主模块中 我也尝试过注入FormsModule内
  • 如何在 Rust 中转换泛型原始类型? [复制]

    这个问题在这里已经有答案了 我想写如下内容 pub struct Point