ctor
的板条箱当前不支持网络组装,although there is active discussion about how to fix this。
尽管我很清楚C ++的静态初始化相关的问题,但是能够在启动时向工厂注册是非常方便的功能,并且在许多情况下有必要避免违反DRY原理。如果没有它,每次想给工厂添加新的可能性时,都必须向main()
添加一行单独的代码,如果需要导入新函数,则可能需要增加几行。这很快就变得乏味。
我想知道是否可以使用程序属性宏和build.rs
构建等效的东西(至少当您要注册的所有内容都集中在一个箱子中时)。该宏将用于标记我要注册的功能,并且该实现的实现会将这些功能的模块路径("crate::your::registered_function"
)保存到文件中某处的一侧,否则只是传递。然后build.rs
会生成一个函数,该函数调用文件中列出的所有函数,而我将手动main()
调用该函数。
module_path!
,但是如果从过程宏的定义内部调用,它将提供宏的模块路径,而不是与TokenStream将要扩展到的模块路径相关的模块路径。该宏可能会生成对module_path!
的调用,但直到稍后运行最终程序时该调用才会评估。