在阅读了关于泛型类型的 Rust 编程语言章节之后,问题出现了,Rust 是否有原始类型的泛型?在 C++ 中,例如,在声明模板时,有泛化typename
,例如
template <typename T>
void example(T param) {
//code
}
现在该函数将能够接受任何原始类型,还有<class T>
.
在 Rust 中,我们可以给泛型限制特征,但是我们如何给泛型限制原始类型呢?举个例子,如果我们完全不指定泛化的限制,我们将无法使用它,因为在公告的时候,我们不确定是否有T
像数字类型这样的操作,例如。
fn example<T>(param: T) {
param + 1//error
}
example(12);
也就是说,我们通常不能告诉函数泛型将是任何数字类型,但我们可以通过 trait 来限制泛型,例如
trait Test {
fn test(&self);
}
fn example<T: Test>(t: T) {
t.test//working
}
好吧,最后,主要问题是如何赋予泛型类型对原始类型的约束?例如,对于所有数字类型。可能吗?或者我是否需要编写一个i32
例如将要实现的特征?还是没有意义?
标准库具有诸如此类的特征
ops::Add
。如果您需要更精确的内容,则通常使用https://docs.rs/num包中的特征:https://play.rust-lang.org/?gist=18b275930d8a934f42f635fc8994fdca