小编A l*_*ant的帖子

如何使用 Macro_rules 定义带有可选 #[cfg] 的结构?

我正在编写一个 Rust 程序,它从 C DLL 动态加载一些函数。我编写了一个辅助结构来加载它们:

// some function pointer definitions
// type func1_ptr = unsafe extern "C" func1() -> ();
// .....

pub struct FuncWrapper {
    pub func1: func1_type,
}

impl FuncWrapper {
    pub fn new() -> Self {
        Self {
            func1: unsafe { mem::transmute(load_function(lib, "func1")) },
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于要加载 100 多个函数,我编写了一个宏来完成这些脏活:

use paste::paste;

macro_rules! define_load_functions {
  ($v:vis $name:ident { $($func_name:ident),* $(,)?}) => {
  paste! {
    $v struct $name {
    $(
      pub $func_name: [<$func_name _ptr>],
    )*
    }

    impl …
Run Code Online (Sandbox Code Playgroud)

macros rust

5
推荐指数
1
解决办法
1303
查看次数

标签 统计

macros ×1

rust ×1