c++ 将新元素“内联”地推入函数指针Map?

snz8szmq  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(91)

我正在创建一个函数指针Map,如下面的最小工作示例所示:

#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;
}

我想知道是否有可能“内联”定义map的新元素(即函数),即直接在代码中定义,而不必首先在代码的其他地方创建一个单独的函数(本例中为f1)。

编辑:解决方案最好是C++98。

4nkexdtk

4nkexdtk1#

是的,无捕获lambda表达式可以转换为函数指针:

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

相关问题