#变长参数 #vec #call #容器 # #函数 #数据

variyak

宏,用于在给定容器(如Vec)的情况下调用变长函数

3个不稳定版本

0.2.0 2021年4月6日
0.1.2 2021年4月6日
0.1.1 2021年3月11日

#240 in FFI

MIT/Apache

9KB
99 代码行

Variyak

Latest Version Rust Documentation Actions Status

此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));
    };
}

依赖项