我有一个 struct :
pub struct OneDLookup <T: PartialOrd + Sub + Add + Copy + Clone, U: Add + Sub + Copy + Clone>{
breakpoints: Vec<T>,
values: Vec<U>,
last_diff_bp: f64, //ignore these, they are not important to this question
last_diff_values: f64,
first_diff_bp: f64,
first_diff_values: f64,
}
这将起到查找表的作用,但是关于这个 struct 有两件重要的事情必须是真的:
断点必须按升序排列,例如1、5、7、9,而不能按任何其他顺序排列. 断点和值的长度必须相同.
是否可以在编译时(或者更好的做法是在编写期间使用 rust 蚀分析器)在宏中判断这些内容?我担心这可能不是.
我对Rust 还很陌生,所以我还在摸索细节.
我试着制作一个基于vec!()
宏的不起作用的小宏,看看我是否能理解那里所做的事情,但不幸的是,我不知道:
macro_rules! create_1d_lookup {
(($($bps:expr,)*); ($($vals:expr,)*)) => (
$crate::my_crate::OneDLookup::new(vec![$($bps),+], vec![$($vals),+])
);
}
OneDLookup::New()将断点和值矢量作为参数.
此 struct 是常量,在初始化后不会更改.