【发布时间】:2019-04-08 09:50:34
【问题描述】:
我知道我可以让函数只接受实现给定特征的类型。例如,我可以
fn f<T>()
where
T: MyTrait,
{
// Super useful stuff
}
如果我想实现一个函数来接受任何不实现给定特征的东西怎么办?例如,假设我有一些计算:
- 需要一些已知的、冗长的预处理,或者
- 有一种特定的方法可以简化该预处理。
我想做的是这样的:
fn preprocess<T>(computation: &mut T)
where
T: !Shortcut,
{
// Carry out the expensive precomputation.
}
我试图弄清楚如何解决这个问题,但我似乎无法找到任何解决方案。
【问题讨论】:
-
看起来这在 Rust 中现在不可用。回购中有active discussion关于它,但到目前为止还没有承诺。您正在寻找的术语是“负面特征界限”。
-
拥有一个实现
preprocess的编译接口和编译过程的其余部分,而不是一个Shortcut trait。不需要预处理的可以实现一个空函数。这是一种 OO 方法而不是程序方法,您要求事物进行自己的预处理。