Rust 如何将一个结构的成员函数作为回调传递给另一个结构
我想把一个结构的成员函数传递给另一个结构 对不起,英语不好,不能说更多细节Rust 如何将一个结构的成员函数作为回调传递给另一个结构,rust,Rust,我想把一个结构的成员函数传递给另一个结构 对不起,英语不好,不能说更多细节 use std::thread; struct Struct1 {} impl Struct1 { pub fn do_some(&mut self, s: &str) { // do something use s to modify self } } struct Struct2 { cb1: Box<Fn(&mut Struct1, &am
use std::thread;
struct Struct1 {}
impl Struct1 {
pub fn do_some(&mut self, s: &str) {
// do something use s to modify self
}
}
struct Struct2 {
cb1: Box<Fn(&mut Struct1, &str)>,
}
fn main() {
let s1 = Struct1 {};
let s2 = Struct2 {
cb1: Box::new(s1.do_some), // how to store do_some function in cb1 ?
};
}
使用std::thread;
结构1{}
impl结构1{
pub fn do_some(&mut self,s:&str){
//做点什么用s来修饰自己
}
}
结构2{
cb1:Box,
}
fn main(){
设s1=Struct1{};
设s2=Struct2{
cb1:Box::new(s1.do\u some),//如何在cb1中存储do\u some函数?
};
}
你们非常接近!要引用方法或任何其他符号,请使用分隔符:
,并指定所述符号的路径。方法或相关函数位于类型的命名空间中,因此方法的路径是Struct1::do\u some
。在Java中,还可以使用
操作符访问这些对象,但在Rust中,
操作符仅用于现有对象,而不用于类型名称
因此,解决办法是:
let s2 = Struct2 {
cb1: Box::new(Struct1::do_some),
};
但是,您可以稍微改进一下函数的类型Box
是一个装箱的trait对象,但如果不想使用闭包,则不一定需要它。如果您只想引用“普通函数”(那些没有环境的函数),可以使用函数指针:
struct Struct2 {
cb1: fn(&mut Struct1, &str),
}
注意小写的fn
,我们不需要框