#function #macro #argument #conditional-compilation #attributes #proc #specify

macro fn_has_this

一个进程属性宏,允许您指定函数是否具有(this)参数(用于条件编译)

1个不稳定版本

0.1.1 2021年9月26日
0.1.0 2021年9月26日

#19 in #conditional-compilation

Download history 115/week @ 2024-04-01 28/week @ 2024-04-08 29/week @ 2024-04-15 31/week @ 2024-04-22 22/week @ 2024-04-29 23/week @ 2024-05-06 31/week @ 2024-05-13 36/week @ 2024-05-20 28/week @ 2024-05-27 23/week @ 2024-06-03 92/week @ 2024-06-10 40/week @ 2024-06-17 26/week @ 2024-06-24 2/week @ 2024-07-01 13/week @ 2024-07-08 24/week @ 2024-07-15

68 每月下载量
2 个crate中使用(通过gmod

MIT 许可证

6KB
80

crates.io

fn_has_this

一个进程属性宏,为函数添加一个(this)参数。

这个宏非常适合条件编译。例如,一些编译器如果在一个非静态函数中未使用(this)参数,可能会根据调用约定将其优化掉。这个宏可以轻松地将您的Rust程序条件编译以与以这种方式编译的函数进行FFI交互。

示例

#[macro_use]
extern crate fn_has_this;

use core::ffi::c_void;

#[has_this("*mut c_void")] // Will create an argument called `this` in the function
pub unsafe extern "fastcall" fn print_pointer() {
    println!("{:x?}", this);
}

#[has_this("me: *mut c_void")] // You can also specify a custom name for the `this` argument
pub unsafe extern "thiscall" fn print_pointer() {
    println!("{:x?}", me);
}

#[cfg_attr(target_os = "windows", has_this("me: *mut c_void"))] // Using `cfg_attr`, you can conditionally compile this attribute macro
pub unsafe extern "thiscall" fn print_pointer() {
    println!("{:x?}", me);
}

依赖项

~1.5MB
~36K SLoC