FuncItemTesterクラスにobject_typeのメンバ関数ポインタを受け取る
コンストラクタを追加する。
このコンストラクタで構築されたFuncItemTesterオブジェクトは、okay
関数の引数で受け取ったobject_typeオブジェクトに対し上記のメンバ
関数ポインタによりメンバ関数を呼び出し、その戻り値によりアイテムが
条件に合うかどうかをテストする。
/**
* @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)
*/
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);