如何指定在某些特征范围内满足给定第一个特征的任何类型也必须隐式满足第二个特征?

时间:2019-04-14 20:37:06

标签: rust traits rust-tokio

我的情况与Unable to tokio::run a boxed Future because the trait bound Send is not satisfied相似:我想在tokio::run未实现Box<T: Future ...>的{​​{1}}类型上使用T

我的情况有所不同,因为我没有编写返回我的Send的方法,因此无法更改其方法签名。它执行Web请求并返回该装箱的将来:

Box

请注意缺少pub fn get_resource(&self,) -> Box<Future<Item = RestStruct, Error = Error<serde_json::Value>>>

对于Tokio documentation,我需要对盒装类型实现Send,即使将来的关联类型为Send,这也不是自动的:

  

精明的读者可能会注意到Send定义中明确的Send特质标记。之所以添加该符号,是因为默认情况下Box并未明确地Future;这会在以后尝试将此未来或其衍生之一传递给Send时引起问题。

我在找出适当简洁的方法时遇到了麻烦。这些路线似乎应该起作用:

tokio::run

我收到许多令人惊讶的错误。我将在下面详细介绍它们,但是我的问题通常可以用短语来表达,我该如何指定:在某些特征范围内满足给定第一个特征的任何类型还必须隐式满足第二个特征


我的解决方案产生的错误:

  

特征impl<T, I, E> Send for T where T: Future<Item = I, Error = E>, I: Send, E: Send, { } 需要一个std::marker::Send声明

我想我了解一个基于unsafe impl的文档,尽管需要澄清:这确实构成了一个described there的“正确实现的Send”,因为相关的类型是Send

  

类型参数Send必须用作某些本地类型(例如T)的类型参数

我知道这与newtype workaround as described in the docs有关,如果这样做的话,它确实会妨碍我要做的事情。这是否意味着我无法完成我想要的?是否有类似类型别名的有界特征可以解决此问题?

  

类型为MyStruct<T>的特征std::marker::Send的冲突实现

那一个,我一点都不明白。 &_的类型要比我尝试使用所有这些&_边界指定的受约束类型大得多;我不希望where&_

0 个答案:

没有答案