Como chamar um método que se consome em um objeto de característica em caixa?
Eu tenho o seguinte esboço de uma implementação:
trait Listener {
fn some_action(&mut self);
fn commit(self);
}
struct FooListener {}
impl Listener for FooListener {
fn some_action(&mut self) {
println!("{:?}", "Action!!");
}
fn commit(self) {
println!("{:?}", "Commit");
}
}
struct Transaction {
listeners: Vec<Box<Listener>>,
}
impl Transaction {
fn commit(self) {
// How would I consume the listeners and call commit() on each of them?
}
}
fn listener() {
let transaction = Transaction {
listeners: vec![Box::new(FooListener {})],
};
transaction.commit();
}
eu posso terTransaction
s com ouvintes que chamarão o ouvinte quando algo acontecer nessa transação. Desde aListener
é uma característica, eu guardo umVec<Box<Listener>>
.
Estou tendo dificuldades para implementarcommit
paraTransaction
. De alguma forma eu tenho que consumir as caixas chamandocommit
em cada um dosListener
s, mas não consigo mover coisas de uma caixa até onde sei.
Como eu consumiria meus ouvintes no commit?