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?