我有以下代码:
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/