我试图写一个"条件"在RPG游戏中检查给定条件是否返回true或false的类。
Conditions.h
#pragma once
#include <functional>
#include <vector>
#include <iostream>
class Conditions
{
public:
bool check(int i);
void initialize();
private:
std::vector<std::function<bool()>> functions;
};
Conditions.cpp
bool Conditions::check(int i)
{
if (i >= functions.size())
{
std::cout << "Conditions::functions's size is " << functions.size() << " but you've tried to enter: " << i << std::endl;
return false;
}
else
{
return functions[i]();
}
}
void Conditions::initialize()
{
//Here I want to initialize all the conditions manually and push them
//into functions member variable.
}
问题是,如何在不为每个函数创建新成员函数的情况下创建此函数(最多可能有200多个函数)
可以编写如下内容:
functions.push_back(
{
if(GameInfo::player.gold>200) return true;
else return false;
}
);
答案 0 :(得分:1)
您可能正在寻找lambdas:
functions.push_back([this]
{
if (GameInfo::player.gold > 200) return true;
else return false;
});
如果您实际上不需要访问该函数中Conditions
的任何成员,那么您也可以完全删除this
捕获:
functions.push_back([]
{
if (GameInfo::player.gold > 200) return true;
else return false;
});
顺便说一句,您的特定功能示例可以非常简化:
functions.push_back([]
{
return GameInfo::player.gold > 200;
});