Hello world,
I am new and just starting codig in Rust.
I have a vec of function pointers and try to execute those.
Al the code "seems" to work eaccept the execution(Raise) of said fPointers.
I've tried casting and dyn enz, but i missing something obviously
Here is the code
#![feature(fn_traits)]
use std::{env::Args, fmt::Debug};
#[allow(non_snake_case)]
#[allow(dead_code)]
#[derive(Debug)]
struct Event<T:Sized>
{
_queue: Vec< T >
}
impl<T> Event <T> where T:Sized
{
fn new() -> Self
{ Self{_queue:Vec::new()} }
fn AddHandler (&mut self, fpointer:T)
{ self._queue.push ( fpointer) }
fn RemoveHandler (&mut self, fpointer:T)
{
// FIND AND DELETE!!!! impl Eq???
// let index = self._queue.iter().position
// (|&r| r == fpointer);
// self._queue.remove(index.unwrap());
}
fn Raise<D>(&self,data:&D)
{
for ifun in self._queue
{
// how to execute it ????
// ive tried
// ifun.call(data);
// <T as Handler<T>>::call (ifun,data)
// HEEEEEEEEEELP what to put here
(ifun)(data)
}
}
}
struct ButtonData {Clikstate:bool} //dummydata
struct Keydata {Key:i8} //dummydata
type Handler<T> = fn (Data: &T) ->bool;
fn main()
{
// buttonclick
let mut Buttonklik: Event<Handler<ButtonData>> = Event::new();
let mylambda : Handler<ButtonData> = |e|
{ println!("MYLambda"); e.Clikstate };
Buttonklik.AddHandler (myfunchandler);
Buttonklik.AddHandler (mylambda);
let but = ButtonData {Clikstate:true};
Buttonklik.Raise(&but) ;
// Keypres
let mykeypres:Handler<Keydata> = |k| {println!("KeyPress") ; true };
let mut onkeypres: Event<Handler<Keydata>> = Event::new();
onkeypres.AddHandler(mykeypres);
let kp = Keydata {Key:27};
onkeypres.Raise(&kp);
fn myfunchandler( b:&ButtonData)->bool
{
println!("MYFUNC"); true
}
}
Regards,
Remco