2017-03-17 8 views
1

私は関数ポインタのマップを作成しています:新しい要素を関数ポインタ "inline"のマップにプッシュしますか?以下の最小限の作業の例に示すよう

#include <iostream> 
#include <map> 
#include <vector> 

using namespace std; 

typedef std::vector<bool > Bar; 
typedef bool (*Foo)(Bar b); 
typedef std::map<int, Foo > MapOfFunctions; 

inline bool f1 (Bar b) { return b[0] && b[1]; } 

int main() { 
    MapOfFunctions myMap; 

    myMap[0] = f1; // works 
    //myMap[1] = // Define a function right here, "in line"?! 

    if (myMap[0](Bar (2,true))) 
    cout << "it's true" << endl; 

    return 0; 
} 
私はマップ「インライン」の新要素(すなわち機能)を定義することが可能であるかどうかを知りたいのです

つまり、コード内の別の場所に別の関数を最初に作成する必要はありません(この例ではf1)。

を編集します。ソリューションは、C++ 98である必要があります。

答えて

4

はい、capturelessのラムダ式は関数ポインタに変換されている:

myMap[3] = [](Bar) { return false; }; 
myMap[7] = [](Bar b) -> bool { b.clear(); return b.size(); }; 
+0

どのようにC++ 98解決策は?これはC++ 11の機能のようです。 OPのこの要件を言及していないため申し訳ありません。 –

+0

@space_voyager:いいえ、申し訳ありません。 –

+0

@space_voyager、 'boost :: bind'結果または' Boost.Phoenix'ランバを保持する 'boost :: function'です。 – chris

関連する問題