可以对Rust中的同类struct / tuple的所有成员进行操作吗?

时间:2016-08-04 22:59:23

标签: struct rust tuples

我有一个带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方法,该方法为每种类型返回一个静态值,但这感觉有点麻烦。我没有检查程序集,但是检查了它可能的所有索引访问,这对于这种低级操作似乎是不必要的。

我也可以打包结构并使用直接的不安全内存访问,但这似乎也不是最佳。

是否有更方便的方法来编写处理结构的所有元素的表达式?

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。可能的是编写将编写所需代码的代码。这称为元编程。在Rust中,元编程有两个主要途径:构建脚本和宏。编译器插件也存在,但要复杂得多。

Rust标准库使用宏来实现从0到32的数组和元组的特征,所以它肯定是一个可接受的模式。您应该首先写出几个案例,看看每个迭代的不同之处,然后从中提取一个宏。

进一步阅读: