以结构作为参数的通用函数?

2024-01-10

struct Item1 {
    a: u32,
}

struct Item2 {
    a: u32,
    b: u32,
}

fn some_helper_function(item: Item1) {
    // Basically `item` could be of type `Item1` or `Item2`.
    // How I create generic function to take any one of them?
    // Some implementation goes here.
}

我怎样才能创建一个通用的some_helper_function其参数可以有多个派生数据类型的函数,例如Item2 or Item1?


在你的例子中,之间没有关系Item1 and Item2,并且 Rust 的泛型不像 C++ 模板或 Python 函数那样是鸭子类型的。

如果您希望一个函数适用于多种类型,通常的方法是使其通用,并具有一些定义这些类型的共同点的特征:

trait HasA {
    fn get_a(&self) -> u8;
}

impl HasA for Item1 {
    fn get_a(&self) -> u8 {
        self.a
    }
}

impl HasA for Item2 {
    fn get_a(&self) -> u8 {
        self.a
    }
}

fn some_helper_function<T: HasA>(item: T) {
    println!("The value of `item.a` is {}", item.get_a());
}

已经有一份提案 https://internals.rust-lang.org/t/fields-in-traits/6933有特征字段,这可以让你使用item.a来自泛型(您仍然需要为每种类型实现该特征)。但它已被推迟。看来这个提案收获太少,而且有些问题没有解决,没有被视为优先事项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以结构作为参数的通用函数? 的相关文章

随机推荐

  • Heroku 上的自定义根域

    我有一个域 example com 我想将其用于位于 example herokuapp com 的 Rails 应用程序 但我很困惑如何执行此操作 赫罗库 说 https devcenter heroku com articles cus
  • 如何使用 jQuery 通过命名空间进行 XML 解析

    我是 jQuery 新手 想解析 XML 文档 我能够使用默认命名空间解析常规 XML 但使用 XML 例如
  • 数据库转储到文本文件,对“行已完成”有副作用

    我试图让一个函数从 select 语句将数据库 sql 转储写入文本文件 返回的量可能非常大 我有兴趣尽快完成此操作 对于大型结果集 我还需要记录每个 x 间隔写入的总行数以及自上一个 x 间隔以来每秒写入的行数 我有一个 map 实际上在
  • 如何将 Spider 搜索添加到我的网站? “无法连接到数据库”

    我下载了蜘蛛搜索引擎 http www sphider eu 我目前正在尝试通过本地主机运行它 我将其提取到根文件夹中 并用 HTML 创建了一个搜索栏 div div
  • 如何指示 SharePoint 场在特定服务器上运行计时器作业?

    我们有一个 SP 计时器作业 运行良好一段时间 最近 管理员在场中加入了另一台服务器 因此 SharePoint 决定开始在此另一台服务器上运行此计时器作业 问题是服务器上没有安装所有依赖项 即 Oracle 因此作业失败 我只是在这里寻找
  • NumPy 数组中元素的索引[重复]

    这个问题在这里已经有答案了 在Python中 我们可以使用以下方法获取数组中值的索引 index 但是对于 NumPy 数组 当我尝试执行以下操作时 decoding index i I get AttributeError numpy n
  • 使用 Java 在网页上查找链接

    使用Java将网页的源代码存储在字符串中 我想提取源代码中的所有url并输出它们 我对正则表达式之类的东西很糟糕 甚至不知道如何解决这个问题 任何帮助将不胜感激 不要使用正则表达式 https stackoverflow com quest
  • 将 jLabel 移动到 jPanel 中的不同位置(类似 Pacman 的游戏)

    我正在制作像吃豆人这样的游戏 到目前为止我才刚刚从网格开始 我启动了网格 但我需要弄清楚如何将某些内容移动到网格中的不同位置 以便当用户单击或我的幽灵移动时 它将显示在屏幕上 我怎样才能让它动起来 我尝试了很多不同的方法 但没有一个对我有用
  • 安装 RavenDb Embedded 时出现 Nuget 依赖错误

    我正在尝试在 ASP NET MVC 5 应用程序中安装 RavenDB Embedded 但出现以下依赖项错误 PM gt Install Package RavenDB Embedded Attempting to resolve de
  • 由于缺少服务结构包,不会添加依赖项

    启动一个新的空 NET Core 2 类库 我尝试使用 nuget 添加任何依赖项 但出现此错误 错误本地源 C Program Files Microsoft SDKs Service Fabric packages 不存在 但服务结构应
  • 在嵌套模型轨道中传递数组隐藏字段

    我认为有以下代码 参数在控制台中传递 Parameters authenticity token gt LJ ZME2lHZ7VwCDgPKX6OFe326fXSXo5UB4M0cPwbCE esthour gt rfp id gt 6 e
  • 在 ListView 顶部添加“正在加载”图像

    我想添加一个 正在加载 Image在我的顶部ListView当所有项目都在加载时 如果有很多项目正在加载 我仍然希望有一个良好的用户体验 所以我想要一个浮动的Image 动画 GIF 在我的上面ListView 如何解决这个问题 一旦有了浮
  • 在 Android Java 应用程序中使用 Kotlin AAR 时出现 java.lang.NoClassDefFoundError

    我必须在 Kotlin 中创建一个库 aar 并且必须在使用 Java 制作的 Android 应用程序中使用它 Kotlin 库有一个带有伴随函数的类 可以在 Java 应用程序中静态使用 当我在 Java 的 Android 应用程序中
  • data.table 1.8.1.:“DT1 = DT2”与 DT1 = copy(DT2) 不同吗?

    我注意到使用不同的赋值运算符时 data table 中存在一些不一致 对我来说不一致 的行为 我不得不承认我从来没有完全理解 和copy 之间的区别 所以也许我们可以在这里阐明一些观点 如果您使用 或 请执行以下命令 你就会明白我的意思
  • C# 中集中使用关键字

    有没有办法在 C 中制作单个 头 类型文件 在 C 中 您有类似 Mainheader h 的内容 其中包含您的所有包含内容 有没有一种方法可以对 C 执行类似的操作 其中您有一个包含所有 using 关键字的文件 现在我有很多使用 例如
  • MVC,从页面中的多个部分视图传回值

    当我尝试从包含相同部分视图两次的页面传回值时 我遇到了问题 我的类定义如下 public class Account IEntity public decimal CurrentBalance get set public List
  • 将 C# 委托的调用约定更改为 CDECL

    我在使用DotNet1 1时C 也遇到过这个问题 问题是这样的 我有一个非托管 dll 它有一个接受函数指针 以及其他参数 的函数 当我在 C 代码中声明 DLLImport 时 我传递了一个委托 但是 C 中的代表有stdcall调用约定
  • PowerShell - 删除文本文件的所有行,直到找到特定字符串

    我目前有一个输出日志文件 有点混乱并且增长很快 这是一个授予邮箱权限的大型脚本的调试输出 我基本上只想删除文件中的每一行 直到找到 7 天前日期的第一次迭代 到目前为止 我可以返回包含该日期的所有行 content Get Content
  • 如何隐藏通过 JavaScript 对话框提示输入的密码?

    如何在 JavaScript 的对话框提示中隐藏用户输入的密码 例如 使用类似的东西 var passwd prompt Enter Password your password here 我希望这样 例如12345输入后 看起来像 or
  • 以结构作为参数的通用函数?

    struct Item1 a u32 struct Item2 a u32 b u32 fn some helper function item Item1 Basically item could be of type Item1 or