我有一个可以读取多种音频格式的程序。共享模块可以提供特征AudioFileReader
,其具有用于读取音频数据的常用方法以及用于将读者与文件扩展名相关联的注册表。
不是将所有可能的音频格式阅读器内置到模块中,这个模块的可扩展性非常有用,因此模块的客户端可以为新格式提供AudioFileReader
(当链接到可执行文件或通过插件系统。)
构建像这样的系统的传统Rust方法是什么?有没有办法避免在不失去可扩展性的情况下需要全局静态注册表?
答案 0 :(得分:1)
您可以使用lazy_static
全局构建此类注册表,其中包含Box<AudioFileReader>
扩展名的地图。
您必须在main中列出它们(或具有主调用init函数)。没有办法自动完成这项工作,Rust在主要工作之前没有生命。