我有一个可以读取多种音频格式的程序。共享模块可以提供特征 AudioFileReader
,它具有读取音频数据的通用方法以及将读取器与文件扩展名相关联的注册表。
与其将所有可能的音频格式读取器内置到模块中,不如让该模块具有可扩展性,这样模块的客户端可以为新格式提供 AudioFileReader
(或者当链接到可执行文件或通过插件系统时)。
构建这样一个系统的传统 Rust 方法是什么?有没有办法在不失去可扩展性的情况下避免需要全局静态注册表?
最佳答案
您可以使用 lazy_static
构建这样的注册表全局,其中包含扩展名到 Box<AudioFileReader>
的映射.
您必须将它们全部列在 main 中(或者让 main 调用 init 函数)。没有办法自动执行此操作,Rust 在 main 之前没有生命。
关于rust - 可扩展的类型注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44895392/