rust - 可扩展的类型注册

标签 rust convention

我有一个可以读取多种音频格式的程序。共享模块可以提供特征 AudioFileReader,它具有读取音频数据的通用方法以及将读取器与文件扩展名相关联的注册表。

与其将所有可能的音频格式读取器内置到模块中,不如让该模块具有可扩展性,这样模块的客户端可以为新格式提供 AudioFileReader(或者当链接到可执行文件或通过插件系统时)。

构建这样一个系统的传统 Rust 方法是什么?有没有办法在不失去可扩展性的情况下避免需要全局静态注册表?

最佳答案

您可以使用 lazy_static 构建这样的注册表全局,其中包含扩展名到 Box<AudioFileReader> 的映射.

您必须将它们全部列在 main 中(或者让 main 调用 init 函数)。没有办法自动执行此操作,Rust 在 main 之前没有生命。

关于rust - 可扩展的类型注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44895392/

相关文章:

memory-management - 什么是布局?

macros - 在 Rust 宏中操作路径?

types - 预期类型 `&Vec<u8>` ,发现 `&Vec<&u8>`

linked-list - 在构建链表时如何保持对最后一个节点的可变引用?

vb.net - 了解在 VB 的官方约定指南中发现的矛盾

c - 拒绝在 C 中使用 <=

rust - 作为返回 traitobject 的 Supertrait 在编译时没有已知的大小

javascript - 局部函数声明应放在 "return"之前或之后

powershell - 导出模块变量名称的命名约定

ruby-on-rails - 模型知道参数哈希 - Rails 反模式?