我有一个宏,它接受一个函数声明列表,并将它们转换为不同的声明.
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和返回类型的多个函数,让它适用于所有这些函数.很容易制作一个适用于同一类型的几个函数的宏,但我无法弄清楚如何使它适用于不同类型.