我有以下代码:

macro_rules! count {
    () => { 1 };
}

#[derive(Debug)]
struct MyStruct<T> {
    field_list: [T; count!()],
}

编译器给出此错误:

error: `derive` cannot be used on items with type macros
 --> src/main.rs:7:21
  |
7 |     field_list: [T; count!()],
  |                     ^^^^^^^^

有什么方法可以在包含由宏指定长度的数组的类型上使用#[derive]吗?

最佳答案

引用我在Github问题上的回答:



遵循派生的“策略”时,无法真正解决该问题:(1)它为您生成边界,(2)它仅生成可编译的代码。但是由于自定义派生是稳定的,因此可以使用诸如derivative之类的 crate 来重写边界,从而避免了这个问题:

#[derive(Derivative)]
#[derivative(Debug)]
struct MyStruct<T> {
    #[derivative(Debug(bound="T: ::std::fmt::Debug"))]
    field_list: [T; count!()],
}

关于macros - 如何在包含由宏指定长度的数组的类型上使用#[derive]?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50296196/

10-10 21:30