ฉันกำลังเขียนโปรแกรมจำลองเหตุการณ์ที่ไม่ต่อเนื่องซึ่งจำลองกระบวนการ แลกเปลี่ยนกิจกรรม กระบวนการเป็นการนำกระบวนการลักษณะไปใช้ และจัดเก็บไว้ในคลาสการจำลอง ซึ่งจะบอกให้ทราบเมื่อต้องประมวลผลเหตุการณ์
การจำลองสามารถประกอบด้วยกระบวนการได้เพียงประเภทเดียวเท่านั้น หรือสามารถมีกระบวนการประเภทต่าง ๆ ได้ นี่คือเหตุผลที่ฉันต้องการอิสระในการเลือกกระบวนการแบบไดนามิก
ตอนนี้ฉันทำด้วยกล่อง ทุกรหัสที่ใช้การจำลองจำเป็นต้องสร้างกล่องและใส่วัตถุที่สร้างขึ้นในกล่อง
trait Process {
// methods
fn start();
fn process_event();
}
struct Simulation {
processes: Vec<dyn Process>
}
impl Simulation {
fn add_process(&mut self, p: Box<dyn Process>) {
processes.push(p);
}
fn run() {
// calls process_event on processes, based on simulation logic
}
}
ปัญหาที่ใหญ่ที่สุดของฉันคือในบางกรณีกระบวนการเหล่านี้จำเป็นต้องมีการอ้างอิงตนเอง จากนั้นฉันต้องแทนที่กล่องด้วย Pin หรือ OwningRef และฉันไม่ต้องการให้มีการจำลองที่เป็นไปได้ทั้งหมด สร้าง Pin หรือ OwningRef ดังนั้น ฉันต้องการให้พารามิเตอร์ทั่วไปบางประเภทบอกให้การจำลองใช้คลาสต่างๆ สำหรับกล่อง
ส่วนขยายที่ดีจะต้องไม่มีการจัดส่งแบบไดนามิกเลย และการจำลองมีประเภทกระบวนการจริง ไม่ใช่แบบทั่วไป
ดังนั้นฉันต้องการบางอย่างเช่น - Simulation<P> where P is either a Process or Deref<Process>
.