generic vtable
All checks were successful
buildbot/mdbook test Build done.

This commit is contained in:
AF 2024-09-15 21:00:03 +00:00
parent f373feb7c4
commit df8e885c7e
Signed by: alisa
SSH Key Fingerprint: SHA256:vNY4pdIZvO1FYJKHROkdHLtvyopizvZVAEwg9AF6h04

View File

@ -8,18 +8,20 @@ struct Functions {
increment: fn(i32) -> i32, increment: fn(i32) -> i32,
} }
fn get_functions() -> &'static Functions { fn get_functions<const STEP: i32>() -> &'static Functions {
# /* # /*
let five = || 5; let five = || 5;
let increment = |n| n + 1; let increment = |n| n + STEP;
let functions = Functions { five, increment }; let functions = Functions { five, increment };
&functions &functions
# */ # */
# &Functions { five: || 5, increment: |n| n + 1 } # &Functions { five: || 5, increment: |n| n + STEP }
} }
assert_eq!((get_functions().five)(), 5); assert_eq!((get_functions::<1>().five)(), 5);
assert_eq!((get_functions().increment)(4), 5); assert_eq!((get_functions::<3>().five)(), 5);
assert_eq!((get_functions::<1>().increment)(4), 5);
assert_eq!((get_functions::<3>().increment)(4), 7);
``` ```
Try solving it in the playground: Try solving it in the playground:
@ -30,15 +32,17 @@ struct Functions {
increment: fn(i32) -> i32, increment: fn(i32) -> i32,
} }
fn get_functions() -> &'static Functions { fn get_functions<const STEP: i32>() -> &'static Functions {
let five = || 5; let five = || 5;
let increment = |n| n + 1; let increment = |n| n + STEP;
let functions = Functions { five, increment }; let functions = Functions { five, increment };
&functions &functions
} }
fn main() { fn main() {
assert_eq!((get_functions().five)(), 5); assert_eq!((get_functions::<1>().five)(), 5);
assert_eq!((get_functions().increment)(4), 5); assert_eq!((get_functions::<3>().five)(), 5);
assert_eq!((get_functions::<1>().increment)(4), 5);
assert_eq!((get_functions::<3>().increment)(4), 7);
} }
``` ```