// 确认代码
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> ls
compiled  CRTP.cpp  ecs.cpp  stdvariant.cpp  type_erase.cpp  virtual_function.cpp

// 编译代码
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 CRTP.cpp -o compiled/CRTP_O0 -O0
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 CRTP.cpp -o compiled/CRTP_O2 -O2
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 ecs.cpp -o compiled/ecs_O0 -O0
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 ecs.cpp -o compiled/ecs_O2 -O2
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 stdvariant.cpp -o compiled/stdvariant_O0 -O0
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 stdvariant.cpp -o compiled/stdvariant_O2 -O2
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 type_erase.cpp -o compiled/type_erase_O0 -O0
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 type_erase.cpp -o compiled/type_erase_O2 -O2
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 virtual_function.cpp -o compiled/virtual_function_O0 -O0
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> g++ -std=c++20 virtual_function.cpp -o compiled/virtual_function_O2 -O2

// 确认编译结果正确
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism]
└-> cd compiled/
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ls
CRTP_O0  ecs_O0  stdvariant_O0  type_erase_O0  virtual_function_O0
CRTP_O2  ecs_O2  stdvariant_O2  type_erase_O2  virtual_function_O2

// 运行并记录时间
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./CRTP_O0
CRTP Static Polymorphism Execution Time: 6629 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./CRTP_O2
CRTP Static Polymorphism Execution Time: 88 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./ecs_O0
ECS Execution Time: 23662 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./ecs_O2
ECS Execution Time: 2847 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./stdvariant_O0
std::variant Execution Time: 35229 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./stdvariant_O2
std::variant Execution Time: 373 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./type_erase_O0
Type Erasure (std::function) Execution Time: 23404 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./type_erase_O2
Type Erasure (std::function) Execution Time: 3712 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./virtual_function_O0
Virtual Function Execution Time: 20982 µs
┌[Ternary_Operator@/toDataDrive/ARE/experiments/polymorphism/compiled]
└-> ./virtual_function_O2
Virtual Function Execution Time: 6044 µs

// 综合测试成绩:
// CRTP: -O0->6629 µs, -O2->88 µs
// std::variant: -O0->35229 µs, -O2->373 µs
// Type Erasure: -O0->23404 µs, -O2->3712 µs
// ECS: -O0->23662 µs, -O2->2847 µs
// Virtual Function: -O0->20982 µs, -O2->6044 µs

// -O0: CRTP > Virtual Function > Type Erasure ~= ECS > std::variant
// -O2: CRTP > std::variant > ECS > Type Erasure > Virtual Function


// 综合考虑，引擎采用CRTP多态实现方法。
