OSDN Git Service

[Feature] FuncItemTesterにメンバ関数ポインタを引数に受け取るコンストラクタを追加
authorHabu <habu1010+github@gmail.com>
Thu, 2 Sep 2021 14:13:21 +0000 (23:13 +0900)
committerHabu <habu1010+github@gmail.com>
Thu, 2 Sep 2021 14:13:21 +0000 (23:13 +0900)
FuncItemTesterクラスにobject_typeのメンバ関数ポインタを受け取る
コンストラクタを追加する。
このコンストラクタで構築されたFuncItemTesterオブジェクトは、okay
関数の引数で受け取ったobject_typeオブジェクトに対し上記のメンバ
関数ポインタによりメンバ関数を呼び出し、その戻り値によりアイテムが
条件に合うかどうかをテストする。

src/object/item-tester-hooker.cpp
src/object/item-tester-hooker.h

index 3c7797f..463202b 100644 (file)
@@ -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<bool(const object_type *)> test_func)
index 7897581..f1aeb91 100644 (file)
@@ -70,6 +70,8 @@ private:
  */
 class FuncItemTester : public CloneableItemTester<FuncItemTester> {
 public:
+    using TestMemberFunctionPtr = bool (object_type::*)() const;
+    explicit FuncItemTester(TestMemberFunctionPtr test_func);
     explicit FuncItemTester(std::function<bool(const object_type *)> test_func);
     explicit FuncItemTester(std::function<bool(player_type *, const object_type *)> test_func, player_type *player_ptr);