如何跳过将其变体传递给宏的枚举名称?

How to skip enum name passing its variant to a macro?

我不想每次都提及包含变体的枚举名称,假设它始终相同。可能吗?

枚举中的 struct 变体是关键。

在更平凡的层面上:

我试过以下方法:

enum Types {
  t1,
  t2{id: u64}
}

macro_rules! createenum {
  (enum $enumname: ident { $( $variant: ident ( $arg1: literal, $arg2: expr ) ,)* } ) => {
    enum $enumname {
      $( $variant, )*
    }

    impl $enumname {
      fn arg2(&self) -> Option<Types> {
        match self {
          $( $enumname::$variant => Some(Types::$arg2), )*
          _ => None
        }
      }
    }

  }
}

createenum! {
  enum MyEnum {
    Var1("one", t1),
    Var2("two", t2{id: 5}),
  }
}

显然上面的代码不起作用,因为 Rust 不知道 t1t2 是什么。但我不愿意每次都输入基本枚举。

我该怎么办?

use Types::*; Rust Playground demo