una tiempo sub que pasaron pasar parametros parametro otra macro llamar funcion espera error ejecucion desde con argumentos macros rust

macros - sub - ¿Cómo hacer cumplir que un argumento macro `ty` implementa un rasgo en tiempo de compilación?



se pasaron 2 argumentos a una funcion que espera 1 (1)

Una solución es crear una función privada no documentada que fallará la compilación si no se cumplen sus condiciones:

macro_rules! a { ( $n:ident, $t:ty ) => { struct $n { x: $t } impl $n { fn _assert_add() where $t: std::ops::Add<$t, Output = $t> { } fn _assert_mul() where $t: std::ops::Mul<$t, Output = $t> { } fn _verify_assertions() { Self::_assert_add(); Self::_assert_mul(); } } } } a!(Moo, u8); a!(Woof, bool); fn main() {}

Entonces confiaría en el optimizador para eliminar el código en tiempo de compilación, por lo que no esperaría ninguna hinchazón adicional.

Muchas gracias a Chris Morgan por proporcionar una mejor versión de esto que admita características que no sean seguras para objetos.

Quiero escribir una macro como esta:

macro_rules! a { ( $n:ident, $t:ty ) => { struct $n { x: $t } } }

Pero $t debería implementar los rasgos Add , Sub y Mul . ¿Cómo puedo verificarlo en tiempo de compilación?