假设我有一个特质:
trait ReactorClient<S : Source + ?Sized> {
fn get_source(&self) -> S;
}
和一个接受Box的方法:
fn register<S : Source + ?Sized>(&self, mut client: Box<dyn ReactorClient<S>>, token: Token, interests: Interest) -> io::Result<()>
在这个方法中,如何从Box<dyn ReactorClient<S>>
转换为&mut S
?到目前为止,每个尝试都以类似the size of
S cannot be statically determined
的值结束。
我尝试了&mut client.get_source()
,&mut client.as_mut().get_source()
等-没有运气。
感觉我需要做些别的事情来避免S的引用?
1条答案
按热度按时间wfveoks01#
从根本上说,你错了,如果你想有一个
&mut S
,你应该返回一个&mut S
,而不是一个S
。如果返回一个
S
的owned示例,它将不再是ReactorClient
内部的示例。不管你写什么,像&mut client.get_source()
或&mut client.as_mut().get_source()
都会改变这个事实。所以你应该把
get_source()
函数的返回值改为&mut S
。此外,您可能希望函数为&mut self
,否则无法真正返回&mut S
。