泛型(对标 C++ 模板)
函数、方法、结构体、枚举都可以使用泛型。
Type Annotation
明确指出泛型的类型需要满足什么条件。
函数泛型/函数模板
1 2
| template <typename T> void function(T a) {}
|
方法泛型/方法模板
可以包含其他的类型
1 2 3 4 5
| impl<T> Point<T> { fn func<U>(&self) -> &T { } }
|
1 2 3 4 5
| template <typename T> class Point { template <typename U> T func() {} }
|
const
泛型、模板参数
对应 C++ 中 template <int N>
这样的模板参数。
1 2
| fn func<T, const N: usize> (arr: [T; N]) {}
|
1 2
| template <typename T, size_t N> void func(std::array<T, N> arr) {}
|
针对 const
泛型做检查
这个在 C++ 里应该需要使用 require
做检查,我还没有研究过。Rust 里使用 Assert<>: IsTrue
泛型限制即可。
1 2 3 4 5 6 7
| fn something<T>(val: T) where Assert<{ core::mem::size_of::<T>() < 768 }>: IsTrue, { }
|
const fn
对应 C++ 的 constexpr
,在编译期求值。