gpt4 book ai didi

rust - 我可以有一个通用函数来接受所有不实现特征的类型吗?

转载 作者:行者123 更新时间:2023-11-29 08:03:35 25 4
gpt4 key购买 nike

我知道我可以让函数只接受实现给定特征的类型。例如,我可以

fn f<T>()
where
T: MyTrait,
{
// Super useful stuff
}

如果我想实现一个接受任何实现给定特征的函数怎么办?例如,假设我有一些计算:

  • 需要一些已知的、冗长的预处理,或者
  • 有一种特定的方法可以缩短预处理过程。

我想做的是:

fn preprocess<T>(computation: &mut T)
where
T: !Shortcut,
{
// Carry out the expensive precomputation.
}

我尝试弄清楚如何解决这个问题,但我似乎无法找到任何解决方案。

最佳答案

不,你不能。

相反,您可以以另一种方式使用不稳定特化功能,以选择加入更高效的处理:

#![feature(specialization)]

trait Process {
fn process(self);
}

trait Short {}

impl Short for i32 {}

impl<T> Process for T
where
T: std::fmt::Debug,
{
default fn process(self) {
println!("Processing {:?}", self)
}
}

impl<T> Process for T
where
T: std::fmt::Debug + Short,
{
fn process(self) {
println!("Shortcut {:?}", self)
}
}

fn main() {
42i32.process();
vec![1, 2, 3].process();
}
Shortcut 42
Processing [1, 2, 3]

另见:

关于rust - 我可以有一个通用函数来接受所有不实现特征的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com