我有一个带add
运算符的向量:
use std::ops::Add;
struct float2(f64, f64);
impl Add for float2 {
type Output = float2;
fn add(self, _rhs: float2) -> float2 {
float2(self.0 + _rhs.0,
self.1 + _rhs.1)
}
}
是否有可能将其编写为也适用于3D或4D矢量的方式?
例如: struct float2(f64, f64, f64);
我设法添加了一个Index
运算符和一个len
为每种类型返回静态值的方法,但这有点麻烦。我没有检查程序集,但是可能检查了所有索引访问,对于这样的低级别操作而言,这似乎是不必要的。
我也可以打包该结构并使用直接不安全的内存访问,但这似乎也不是很理想。
有没有更方便的方式来编写处理该结构的所有元素的表达式?
不,这是不可能的。可能的是编写将编写所需代码的代码。这就是所谓的元编程。在Rust中,元编程有两种主要途径:构建脚本和宏。编译器插件也存在,但要复杂得多。
Rust标准库使用宏为从0到32的数组和元组实现特征,因此,它肯定是一种可接受的模式。您应该先写出一些案例,看看每个迭代有何不同,然后从中提取一个宏。
进一步阅读:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句