有没有办法在宏包装箱中具有公共特性?

杰科隆

我有一个带有宏的proc宏板条箱,该宏在展开时需要为Rust内置类型使用自定义特征实现。我试图在同一条板条箱中定义特征,但是Rust告诉我proc-macro条板箱只能有公共宏(带有标记的函数#[proc_macro]),其他任何东西都不能是公共的。因此,我将特征放入另一个板条箱中,并将它作为依赖宏放入proc-macro板条箱中。但是,这意味着任何想要使用我的proc宏板条箱的人也必须依赖于其他特征板条箱。

所以我想如果有一个公共特性添加到PROC宏箱,或以其他方式进行以某种方式连接,以便最终用户无法尝试使用一个没有其他的PROC宏和特质箱子的方法吗?如果不可能,唯一的解决方案就是记录依赖关系,这是很脆弱的。

彼得·霍尔

通常处理此问题的方法是完全不依赖用户。

您的问题可以用3个板条箱解决:

  • “内部”板条箱,其中包含proc-macro使用的类型和特征定义
  • proc-宏板条箱:
    • 取决于内部的板条箱,因此可以使用其类型和特征
  • “公共”板条箱:
    • 取决于内部和宏程序
    • 重新导出您希望用户使用的所有类型,特征和宏

每当您的宏在其生成的代码中提及共享类型时,就需要使用完全限定的名称,以便用户也无需导入它们。


这种模式在野外流行的一些例子:

  • thiserror取决于thiserror-impl哪个包含实际的宏
  • pin-project取决于pin-project-internal哪个再次包含宏
  • darling取决于darling-coredarling-macro,其本身也取决于darling-core

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法测试锈中的宏?

来自分类Dev

有没有办法保护公共端点?

来自分类Dev

有没有办法阻止包装面板中的物品“过早”包装?

来自分类Dev

有没有办法在没有程序宏的情况下在属性中“执行宏操作”?

来自分类Dev

有没有办法从列表中获取具有特定属性的所有项目

来自分类Dev

Symfony 服务:有没有办法在“services.yml”中设置公共属性?

来自分类Dev

有没有办法在文档中隐藏宏模式?

来自分类Dev

有没有办法在LeMP中“定义”接受Type文字输入的宏

来自分类Dev

有没有办法关闭Notepad ++宏中的弹出窗口?

来自分类Dev

有没有办法将输入类型包装到C ++中的模板类?

来自分类Dev

有没有办法在ggarrange中包装剧情标题?

来自分类Dev

有没有办法旋转visreg包装中的x轴标签?

来自分类Dev

有没有办法在光滑的轮播中同时具有slidesToScroll和swipeToScroll行为?

来自分类Dev

有没有办法在GTK / GLib中具有精确的定时事件?

来自分类Dev

有没有办法在代码中重用具有不同值的函数?

来自分类Dev

有没有办法在抽象类中具有可选方法?

来自分类Dev

有没有办法检查Groovy中的类或对象是否具有mixin?

来自分类Dev

Java:有没有办法在枚举中获取具有不同返回类型的方法?

来自分类Dev

有没有办法在公共github上查看公共仓库的推送日志?

来自分类Dev

为什么有时需要外部包装箱?

来自分类常见问题

有没有办法在PHP中扩展特征?

来自分类Dev

有没有办法清除JavaScript中的对象?

来自分类Dev

有没有办法重置Angular中的$ touched?

来自分类Dev

有没有办法在leveldb中更改键?

来自分类Dev

有没有办法使ghc中的并置过载?

来自分类Dev

有没有办法刷新Inkscape中的扩展

来自分类Dev

有没有办法在POJO中访问SlingRepository?

来自分类Dev

有没有办法在Haskell中取消映射?

来自分类Dev

有没有办法在VBA中编辑公式

Related 相关文章

  1. 1

    有没有办法测试锈中的宏?

  2. 2

    有没有办法保护公共端点?

  3. 3

    有没有办法阻止包装面板中的物品“过早”包装?

  4. 4

    有没有办法在没有程序宏的情况下在属性中“执行宏操作”?

  5. 5

    有没有办法从列表中获取具有特定属性的所有项目

  6. 6

    Symfony 服务:有没有办法在“services.yml”中设置公共属性?

  7. 7

    有没有办法在文档中隐藏宏模式?

  8. 8

    有没有办法在LeMP中“定义”接受Type文字输入的宏

  9. 9

    有没有办法关闭Notepad ++宏中的弹出窗口?

  10. 10

    有没有办法将输入类型包装到C ++中的模板类?

  11. 11

    有没有办法在ggarrange中包装剧情标题?

  12. 12

    有没有办法旋转visreg包装中的x轴标签?

  13. 13

    有没有办法在光滑的轮播中同时具有slidesToScroll和swipeToScroll行为?

  14. 14

    有没有办法在GTK / GLib中具有精确的定时事件?

  15. 15

    有没有办法在代码中重用具有不同值的函数?

  16. 16

    有没有办法在抽象类中具有可选方法?

  17. 17

    有没有办法检查Groovy中的类或对象是否具有mixin?

  18. 18

    Java:有没有办法在枚举中获取具有不同返回类型的方法?

  19. 19

    有没有办法在公共github上查看公共仓库的推送日志?

  20. 20

    为什么有时需要外部包装箱?

  21. 21

    有没有办法在PHP中扩展特征?

  22. 22

    有没有办法清除JavaScript中的对象?

  23. 23

    有没有办法重置Angular中的$ touched?

  24. 24

    有没有办法在leveldb中更改键?

  25. 25

    有没有办法使ghc中的并置过载?

  26. 26

    有没有办法刷新Inkscape中的扩展

  27. 27

    有没有办法在POJO中访问SlingRepository?

  28. 28

    有没有办法在Haskell中取消映射?

  29. 29

    有没有办法在VBA中编辑公式

热门标签

归档