c ++:如何声明std :: functions而不创建要分配给它们的成员函数

时间:2017-12-03 13:21:58

标签: c++ function callback

我试图写一个"条件"在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; 
  } 
);

1 个答案:

答案 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;
});