rust - 检查宏中定义的项目中的功能标志
问题描述
目前我有一个看起来像这样的板条箱:
trait TestTrait {}
macro_rules! add_trait {
($type:ident) => {
#[cfg(feature="my-feature")]
impl TestTrait for $type {}
}
}
正如这个箱子的单元测试中所写的那样,这工作得很好。但是,当我在我的应用程序中实际使用 crate 作为依赖项时,启用了功能标志,不会添加特征;我相信是因为在[cfg(feature="my-feature")]
我的应用程序的上下文中进行了评估,它没有这样的功能标志。查看宏扩展代码,该impl TestTrait ...
项目不存在,即使宏的其他部分(与此最小示例无关)存在。
有没有办法使这项工作?例如,是否有某种 [cfg(feature="my-crate::my-feature")]
语法?如果不是,我应该如何在宏上下文中基于创建范围的功能标志启用条件编译?
解决方案
我相信是因为在
[cfg(feature="my-feature")]
我的应用程序的上下文中进行了评估,它没有这样的功能标志。
是的,这完全正确。
您可以将功能标志放在宏本身上,然后多次定义它:
#[cfg(feature="my-feature")]
macro_rules! add_trait {
($type:ident) => {
impl TestTrait for $type {}
}
}
#[cfg(not(feature="my-feature"))]
macro_rules! add_trait {
($type:ident) => {}
}
推荐阅读
- python - 在 QCalendarWidget 中将项目添加到 QTableView
- excel-formula - 需要对整行的值求和,然后除以同一行的空白单元格的数量
- authentication - 我应该对 Auth0 短信和电子邮件一次性代码使用什么方法
- c - 编写我的 Server.c 套接字维护多线程的问题
- javascript - 有没有办法在“反应选择”中搜索选项时包含组标签
- python - 在 Django 中使用 YAML 文件作为数据源
- javascript - 带有悬垂的jQuery滑动抽屉
- sql - ORA-00904 具有 UNION 和 ORDER BY 别名
- web-config - IIS 子应用程序无法读取 Web.Config
- sklearn-pandas - “需要一维数组时传递了列向量 y”错误消息