C++:数据类型是函数的map的语法?

Nic*_*ner 1 c# c++ syntax functional-programming

在C#中,我想要的是这样的:

IDictionary<string, action()> dict = new Dictionary<string, action()>();
Run Code Online (Sandbox Code Playgroud)

我如何在C++中执行此操作?这会给编译器错误:

map<string, void()> exercises;
Run Code Online (Sandbox Code Playgroud)

Dar*_*rio 6

使用boost :: function,一个可以用签名调用的任何对象的多态包装器(包括函数,函数对象等).

map<string, function<void()>> ...;
Run Code Online (Sandbox Code Playgroud)

请注意,新的C++标准已经包含function<functional>.


解释背景:C++中唯一的这种内置机制是旧的C风格的函数指针(void (*)()).这些都是极低级别的,基本上只是存储一个函数的内存地址,因此甚至远没有接近C#代表的权力.

您不能创建匿名函数,也不能引用特定对象的成员函数或任何变量或数据(闭包).

因此,人们经常使用所谓的仿函数,这些仿函数是通过重载函数模仿函数行为的operator ().与模板结合使用时,可以使用普通函数指针.

问题是这些仿函数通常由特殊或匿名类型组成,不能方便地引用.

function是解决所有问题的最酷方式 - 所有行为都像一个函数,包括很酷的新lambda样式表达式.

function<void()> f = []() { cout << "Hello, World"> };
f();
Run Code Online (Sandbox Code Playgroud)