2017-12-03 22 views
0

rpgゲームで、条件がtrueかfalseを返すかどうかを調べるための "条件"クラスを作成しようとしています。C++:std :: functionsを宣言する方法を教えてください。

私はそこになります(これらの各々のための新しいメンバ関数を作成せずに、この関数を作成する方法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([this] 
{ 
    if (GameInfo::player.gold > 200) return true; 
    else return false; 
}); 

あなたが実際に機能してConditionsのいずれかのメンバーにアクセスする必要がない場合は、あなたも完全thisキャプチャを削除することができます:あなたはおそらくlambdasを探している

functions.push_back( 
    { 
    if(GameInfo::player.gold>200) return true; 
    else return false; 
    } 
); 

答えて

1

:ような何か:ところで

functions.push_back([] 
{ 
    if (GameInfo::player.gold > 200) return true; 
    else return false; 
}); 

、あなた具体的な関数の例は、次のように非常に単純化することができます:

functions.push_back([] 
{ 
    return GameInfo::player.gold > 200; 
}); 
+0

はい、あなたの答えの編集版は私の使用にはるかに良く合います。私は条件クラス内のすべてを静的に変更することにしました。静的に使用できないため、エラーが発生していました。どうもありがとう。 –

関連する問題