From ec557991ce9a6e8e6b846bdb0a53d4605fc74e4a Mon Sep 17 00:00:00 2001 From: Habu Date: Thu, 2 Sep 2021 23:13:21 +0900 Subject: [PATCH] =?utf8?q?[Feature]=20FuncItemTester=E3=81=AB=E3=83=A1?= =?utf8?q?=E3=83=B3=E3=83=90=E9=96=A2=E6=95=B0=E3=83=9D=E3=82=A4=E3=83=B3?= =?utf8?q?=E3=82=BF=E3=82=92=E5=BC=95=E6=95=B0=E3=81=AB=E5=8F=97=E3=81=91?= =?utf8?q?=E5=8F=96=E3=82=8B=E3=82=B3=E3=83=B3=E3=82=B9=E3=83=88=E3=83=A9?= =?utf8?q?=E3=82=AF=E3=82=BF=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit FuncItemTesterクラスにobject_typeのメンバ関数ポインタを受け取る コンストラクタを追加する。 このコンストラクタで構築されたFuncItemTesterオブジェクトは、okay 関数の引数で受け取ったobject_typeオブジェクトに対し上記のメンバ 関数ポインタによりメンバ関数を呼び出し、その戻り値によりアイテムが 条件に合うかどうかをテストする。 --- src/object/item-tester-hooker.cpp | 10 ++++++++++ src/object/item-tester-hooker.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/object/item-tester-hooker.cpp b/src/object/item-tester-hooker.cpp index 3c7797f56..463202b2a 100644 --- a/src/object/item-tester-hooker.cpp +++ b/src/object/item-tester-hooker.cpp @@ -22,6 +22,16 @@ TvalItemTester::TvalItemTester(tval_type tval) /** * @brief Construct a new Func Item Tester:: Func Item Tester object * + * @param test_func そのオブジェクトが条件に合うならtrueを返すメンバ関数を指定する + */ +FuncItemTester::FuncItemTester(TestMemberFunctionPtr test_func) + : test_func([f = test_func](player_type *, const object_type *o_ptr) { return (o_ptr->*f)(); }) +{ +} + +/** + * @brief Construct a new Func Item Tester:: Func Item Tester object + * * @param test_func 引数に object_type へのポインタを取り、そのオブジェクトが条件に合うならtrueを返す関数を指定する */ FuncItemTester::FuncItemTester(std::function test_func) diff --git a/src/object/item-tester-hooker.h b/src/object/item-tester-hooker.h index 78975813a..f1aeb91d9 100644 --- a/src/object/item-tester-hooker.h +++ b/src/object/item-tester-hooker.h @@ -70,6 +70,8 @@ private: */ class FuncItemTester : public CloneableItemTester { public: + using TestMemberFunctionPtr = bool (object_type::*)() const; + explicit FuncItemTester(TestMemberFunctionPtr test_func); explicit FuncItemTester(std::function test_func); explicit FuncItemTester(std::function test_func, player_type *player_ptr); -- 2.11.0