Eu tenho o seguinte código de ferrugem
use std::any::Any;
use std::rc::Rc;
fn main() {
let mut variables = Vec::<Rc<dyn Any>>::new();
variables.push(Rc::new(1_i32));
variables.push(Rc::new(false));
variables.push(Rc::new(4.53_f64));
let integer: i32 = *variables[0].clone().downcast::<i32>().unwrap();
let boolean: bool = *variables[1].clone().downcast::<bool>().unwrap();
let floating: f64 = *variables[2].clone().downcast::<f64>().unwrap();
let my_goal: (i32, bool, f64) = (integer, boolean, floating)
println!("{:?}", my_goal);
que eu quero automatizar usando uma macro. ( Eu sei que isso não é o ideal, mas isso é apenas um MWE para fazer uma pergunta sobre macros )
Em particular, quero criar uma tupla que faça downcasting Any
para tipos fornecidos
Minha primeira tentativa é:
macro_rules! my_macro {
($vector:ident; $($type:ty),*) => {
// ($($type),*)
//println!("{:?}", $vector);
//$(println!("{:?}", stringify!($type));)*
let idx = 0;
($(
*$vector[0].clone().downcast::<$type>().unwrap()
),*)
};
}
que está errado por causa do 0
hardcoded. Eu tentei várias maneiras de declarar uma variável e incrementá-la ao longo da macro, mas elas falharam. Como posso fazer?