因此,我首先進行了合理的Google搜索,但所有解決方案都顯得過於複雜。所以,我想我會在這裏問,看看這個任務是否真的需要我遇到過的那種方法...如何實現一個簡單的事件隊列?
因此,說我有一個Event
類。我希望它有一個time
變量和一個functionToExecuteAtTime
函數指針/變量/魔術代碼片段,可以讓我將任何舊函數傳遞給這個類。
另外,我希望事件按照時間順序排列,並執行它們「攜帶」的功能。但忘記這個現在
像這樣的東西......
class Agent
{
public:
int id;
float cash;
Agent::Agent
{
cash = 100;
}
}
class uberSystem
{
public:
float assets;
int supplyOfDeadlyPoison;
float poisonCost;
std::vector<Agent> agents;
uberSystem::uberSystem
{
assets = 100000;
supplyOfDeadlyPoison = 100000;
poisonCost = 8;
for(int i = 0; i < 100; i++)
{
Agent newAgent;
newAgent.id = i;
agents.push_back(newAgent)
}
}
};
class Event
{
public:
int time;
SOMETHING_THAT_LETS_ME_HOLD_FUNCTIONS myFunction;
Event::Event(int t, SOMETHING_THAT_LETS_ME_HOLD_FUNCTIONS func)
{
time = t;
myFunction = func;
}
}
int uselessFunction()
{
return 42;
}
void buyPoisonAndKillAgent(Agent &myAgent, uberSystem &mySystem)//obviously not good...
{
myAgent.cash -= mySystem.poisonCost;
mySystem.assets += mySystem.poisonCost;
mySystem.agents.erase(mySystem.agents.begin()+myAgent.id);
mySystem.supplyOfDeadlyPoison -= 1;
}
int main()
{
uberSystem newSystem;
// Event newEvent(100, uselessFunction());//make a new event
Event newEvent(100, buyPoisonAndKillAgent(newSystem.agents[5], newSystem));
newEvent.myFunction;//run the bloody function
return 0;
}
好了,所以看起來像極一廂情願現在我鍵入它。那麼,我怎麼能做到這一點?函數指針是否要走?還是有一些更好的辦法,我不知何故設法找不到?
哦,顯然我的確有std::function
可用......畢竟我並沒有處於石器時代!
謝謝!
那麼[std :: deque>](http://en.cppreference.com/w/cpp/container/deque)呢? –
2014-10-03 08:24:48
std :: function可以做到這一點,我建議你避免函數指針。 :) – Melkon 2014-10-03 08:27:34
「時間」是實時的還是模擬的?或者它只是用來訂購事件? – MatthiasB 2014-10-03 08:30:00