小编Mas*_*tax的帖子

如何在不同类型的函数上推广Rust宏?

我有一个宏,它接受一个函数声明列表,并将它们转换为不同的声明.

macro_rules! re_export {
    ($(pub fn $i:ident($($arg:ident: $argty:ty)*) -> $ret:ty;)*) => ($(
        extern {
            pub fn $i($($arg: $argty),*) -> $ret;
        }
    )*);
    ($(pub fn $i:ident($($arg:ident: $argty:ty)*);)*) => ($(
        extern {
            pub fn $i($($arg: $argty),*);
        }
    )*);
}
Run Code Online (Sandbox Code Playgroud)

使用方式如下:

re_export! {
    pub fn abs(i: c_int) -> c_int;
    pub fn rand() -> c_int;
    pub fn foo();
    pub fn add(i: c_int, j: c_int) -> c_int;
}
Run Code Online (Sandbox Code Playgroud)

我如何概括宏,以便我可以给它带有或不带args和返回类型的多个函数,让它适用于所有这些函数.很容易制作一个适用于同一类型的几个函数的宏,但我无法弄清楚如何使它适用于不同类型.

macros rust

8
推荐指数
1
解决办法
408
查看次数

标签 统计

macros ×1

rust ×1