3个不稳定版本
0.2.0 | 2021年4月6日 |
---|---|
0.1.2 | 2021年4月6日 |
0.1.1 | 2021年3月11日 |
#240 in FFI
9KB
99 代码行
Variyak
此crate提供了一个宏call_variadic
,可用于构建调用变长函数的样板代码,使用来自容器(如Vec)的数据。
示例
#![feature(c_variadic)]
use variyak::call_variadic;
fn main() {
let data = vec![1, 2];
let arg = 0;
mod test {
#[no_mangle]
pub unsafe extern "C" fn my_func(_fixed: u32, mut _args: ...) -> bool {
true
}
}
unsafe {
assert!(call_variadic!(
test::my_func(arg, ...) // function to call, `...` is the variadic arguments
data, // container identifier
n, // index identifier
data[n], // argument expression: get `argument` at index `n`
2, // maximum number of arguments to expand
));
}
unsafe {
use test::my_func;
assert!(call_variadic!(my_func(arg, ...), data, n, data[n], 2));
assert!(call_variadic!(my_func(arg, ...), data, n, data[n], 2));
assert!(call_variadic!(my_func(arg, arg, ..., arg), data, n, data[n], 2));
assert!(call_variadic!(my_func(arg, ..., arg), data, n, data[n], 2));
assert!(call_variadic!(my_func(arg, 42 + 27, ..., arg, 10usize), data, n, data[n], 2));
};
}