From 883ed804e0223af1dca31413b51667531431d48a Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Mon, 23 Jan 2023 14:44:40 +0900 Subject: [PATCH] Use std::function instead of pointer to avoid ub --- src/3d/anims.cc | 8 ++++---- src/3d/anims.h | 8 +++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/3d/anims.cc b/src/3d/anims.cc index e9ef0b7..79de7e9 100644 --- a/src/3d/anims.cc +++ b/src/3d/anims.cc @@ -5,7 +5,7 @@ Anims::Anims(Model *model, A3F pos, A4C color) color(color), model(model), userdata(nullptr), - function_ptr(nullptr), + function(std::nullopt), is_done_finished(false) {} bool Anims::is_done() { @@ -14,8 +14,8 @@ bool Anims::is_done() { } bool result = is_done_impl(); if (result) { - if (function_ptr) { - function_ptr(userdata); + if (function.has_value()) { + function.value()(userdata); } is_done_finished = true; } @@ -26,5 +26,5 @@ void Anims::reset_is_done() { is_done_finished = false; } void Anims::set_end_callback(Anims::FP fp, void *ud) { userdata = ud; - function_ptr = fp; + function = fp; } diff --git a/src/3d/anims.h b/src/3d/anims.h index 4af1c7a..53540f7 100644 --- a/src/3d/anims.h +++ b/src/3d/anims.h @@ -2,7 +2,9 @@ #define ROCK_PAPER_SCISSORS_DUEL_3D_ANIMS_H_ // standard library includes +#include #include +#include // local includes #include "arrays.h" @@ -15,7 +17,7 @@ class Anims { using UPtr = std::unique_ptr; using SPtr = std::shared_ptr; - using FP = void (*)(void *); + using FP = std::function; Anims(Model *model, A3F pos, A4C color); virtual ~Anims() {} @@ -26,7 +28,7 @@ class Anims { virtual void do_update(float dt) = 0; virtual void do_draw() = 0; - void set_end_callback(FP function_ptr, void *ud); + void set_end_callback(FP function, void *ud); protected: virtual bool is_done_impl() = 0; @@ -35,7 +37,7 @@ class Anims { A4C color; Model *model; void *userdata; - FP function_ptr; + std::optional function; bool is_done_finished; }; -- 2.49.0