gpt4 book ai didi

rust - 如何生成模板化的 const 声明?

转载 作者:行者123 更新时间:2023-12-03 11:41:42 25 4
gpt4 key购买 nike

我正坐着输入大量重复的代码并想——我应该写一个宏来做到这一点。然后我意识到我需要的东西不能用我知道如何编写的宏类型来完成。
这是我需要的(它描述了 u16 中位的位置):

const XXX_OFF: u16 = n;
const XXX: Word = 1 << XXX_OFF;
例如
const RTS_OFF: u16 = 0;
const RTS: Word = 1 << RTS_OFF;

const CTS_OFF: u16 = 3;
const CTS: Word = 1 << CTS_OFF;

// ...
声明偏移量并为 u16 中的每个命名位生成位掩码.
如您所见,唯一改变的是 XXXn .无论如何我可以自动化这个吗?在 C 中这将是微不足道的。我想知道那里是否有某种形式的模板驱动的 proc 宏。或者,如果有另一种方法可以实现相同的目标。也许我必须去学习如何编写 proc 宏。

最佳答案

paste crate 正是您正在寻找的“代码模板”工具。在撰写本文时,操场上没有 1.0.0,所以我使用的是 0.1.18:

extern crate paste; // 0.1.18
type Word = u16;

macro_rules! bitfield_with_offset {
($name:ident, $bit:expr) => {
paste::item! {
const [<$name _OFF>]: u16 = $bit;
}
const $name: Word = 1 << $bit;
}
}

bitfield_with_offset!(ASD, 5);

fn main() {
println!("{}, {}", ASD_OFF, ASD);
}
这将输出:
5, 32
Playground link
似乎 1.0.0 删除了 item!用于更灵活通用的宏 paste!宏,因此您的解决方案可能看起来有些不同。

关于rust - 如何生成模板化的 const 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63539686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com