Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::marker::PhantomData;
- use std::cmp::Ordering;
- type Id<'id> = PhantomData<::std::cell::Cell<&'id mut ()>>;
- struct Named<'id, T>(T, Id<'id>);
- fn name<T, F, Out>(t: T, f: F) -> Out where F: for<'id> FnOnce(Named<'id, T>) -> Out {
- f(Named(t, PhantomData))
- }
- struct SortedBy<'id, T>(T, Id<'id>);
- fn sort_by<'id, T, F: FnMut(&T, &T) -> Ordering>(comp: Named<'id, F>, mut list: Vec<T>) -> SortedBy<'id, Vec<T>> {
- list.sort_by(comp.0);
- SortedBy(list, PhantomData)
- }
- fn main() {
- let initial_vec = vec![3, 2, 1];
- let abc = name(i32::cmp, move |func| {sort_by(func, initial_vec).0});
- println!("Sorted: {:?}", abc);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement