struct - 可以在 Rust 中对同构结构/元组的所有成员进行操作吗?

标签 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 方法,但这感觉有点麻烦。我没有检查程序集,但可能会检查所有索引访问,这对于如此低级别的操作似乎是不必要的。

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

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

最佳答案

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

Rust 标准库使用宏来实现从 0 到 32 的数组和元组的特征,因此这当然是一种可接受的模式。您应该首先写出一些案例来看看每次迭代有何不同,然后从中提取一个宏。

进一步阅读:

关于struct - 可以在 Rust 中对同构结构/元组的所有成员进行操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778662/

相关文章:

c - 使用结构的不兼容指针类型错误

hashmap - 在两个 HashMap 之间交换值

rust - 如果 self 的类型不是 Option,如何 mem::replace self 为 Option?

hash - 多值哈希 Common Lisp

python - 计算第一个数字相似的所有元组值的平均值

C struct into array of struct pointers 编译错误

c# - 如何使用该结构的元素在数组中找到该结构?

rust - `fold` 方法无法在特征对象上调用

python - 如何按反向排序元组,但不反向打破关系? (Python)

struct - 谁拥有采用 &self 的函数中结构成员的所有权?