如何在Rust中将数字值用作通用参数?

3
最初的回答: 作为一个初学者,我正在学习 Rust。我很好奇我们如何将数字值用作泛型参数在编译时像 C++ 中的模板一样被编译。
以下是同等的 C++ 代码:
template<class T, int dim>
struct vec {
    std::array<T, dim> data;
    vec(): data() {}
    vec(const vec<T, dim>& obj): data(obj.data) {}
    ~vec() {}
};
int main() {
    vec<float, 3> v3;
}

上述代码将被编译成与“最初的回答”相同的方式。

struct vec {
    std::array<float, 3> data;
    vec(): data() {}
    vec(const vec<float, 3>& obj): data(obj.data) {}
    ~vec() {}
};
int main() {
    vec v3;
}

1
常量泛型仍然不稳定,如下所示,但你可以尝试使用宏。在Rust中,宏比C++更强大。 - undefined
2个回答

5

我相信你在寻找常量泛型,它们尚未在Rust的稳定版本中发布。你可以在使用不稳定版的Rust中这里找到一个示例。


2
只是为了记录,const泛型在1.51版本中已经稳定下来了。 - undefined
这是一个关于Rust博客讨论常量泛型的链接:https://blog.rust-lang.org/2021/02/26/const-generics-mvp-beta.html - undefined

-8

你知道吗,实际上 Rust 中有泛型!

我强烈建议你通读《Rust 程序设计语言》(TRPL)。

你的问题可以在这里找到答案。

在 Rust 中,你不需要真正的构造函数和析构函数。Rust 会为你处理。TRPL 提供了一个很好的示例

此外,对于向量(vector),已经支持泛型数据类型,所以你不必自己实现。请查看这个


6
在Rust中实际上有泛型!但是const generics不稳定,并且在你提供的TRPL链接中没有提到。在SO上,只提供链接的回答也是不鼓励的。虽然在Rust中默认的析构函数可能足够处理某些情况,但实际上你确实需要自定义析构函数。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接