gpt4 book ai didi

rust - 有没有一种方法可以将函数作为宏的参数传递?

转载 作者:行者123 更新时间:2023-12-03 11:34:54 24 4
gpt4 key购买 nike

我正在尝试在gtk +中编写类似于g_signal_connect_swapped的函数。

macro_rules! connect_clicked_swap {
($widget: tt,$other_widget: expr,$function: ident) => {
$widget.connect_clicked(|widget| $function($other_widget))
};
}
ident在这里不起作用,因为我想将完整路径传递给该函数。例如。 gtk::ApplicationWindow::close。所以我可以做类似 connect_clicked_swap!(button, &window, gtk::ApplicationWindow::close)的事情

最佳答案

您可以使用path而不是ident来指定路径。但是最灵活的方法是使用expr,它不仅可以接受路径,而且还可以返回返回函数(包括闭包)的表达式。

macro_rules! connect_clicked_swap {
($widget: tt, $other_widget: expr, $function: expr) => {
$widget.connect_clicked(|widget| $function($other_widget))
};
}
connect_clicked_swap!(widget1, widget2, path::to::function);
connect_clicked_swap!(widget1, widget2, |widget| println!("widget = {}", widget);

关于rust - 有没有一种方法可以将函数作为宏的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65426019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com