gpt4 book ai didi

c# - C++:数据类型为函数的 map 语法?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:38 24 4
gpt4 key购买 nike

在 C# 中,我想要的看起来像这样:

IDictionary<string, action()> dict = new Dictionary<string, action()>();

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

map<string, void()> exercises;

最佳答案

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

map<string, function<void()>> ...;

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


背景说明:C++ 中唯一的这种内置机制是旧的 C 风格函数指针 (void (*)())。这些都是非常低级的,基本上只是存储函数的内存地址,因此远不及 C# 委托(delegate)的功能。

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

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

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

function是解决所有这些问题的最酷方式 - 所有行为都像函数的东西,包括很酷的新 lambda 式表达式。

function<void()> f = []() { cout << "Hello, World"> };
f();

关于c# - C++:数据类型为函数的 map 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com