- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决匿名函数使问题变得非常非常容易的问题,并且想知道这在 C++ 中是否可行。
我想做的是(本质上)
template<typename T>
T DoSomething(T one, function<T(T)> dosomething)
{
return one + dosomething(5);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
这个例子对于我必须做的事情来说非常非常简单。在 C# 中,我会执行 p => p*5。我知道使用 C++0x 这很容易,但我不能使用它。我觉得我应该能够使用 boost::lambda 或 boost::bind 和 boost::function 与占位符的组合来完成它,但我似乎无法让它工作。这可能是不可能的,那也没关系,但如果不可能,请回答。谢谢。
编辑:好的,似乎 int 的简单情况下工作正常,那么更复杂的结构呢?那么,让我们试试
struct NumHolder
{
int x;
}
template<typename T>
T DoSomething(T one, function<T(NumHolder)> dosomething)
{
NumHolder temp;
temp = 5
return one + dosomething(temp);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
这里我的 C# 表达式应该是 p => p.temp * 5。这可以在 C++ 中使用 boost 来实现吗?
编辑 2:好的,现在我只是好奇 :D 我将如何在 lambda 表达式中调用函数?所以,如果我们有
int ChangeVal(int mult)
{
return mult*5;
}
struct NumHolder
{
int x;
}
template<typename T>
T DoSomething(T one, function<T(NumHolder)> dosomething)
{
NumHolder temp;
temp = 5
return one + dosomething(temp);
}
void GetMyVal(...)
{
DoSomething<int>(1, /*anonymous func here*/)
}
在 C# 中,我可以调用 p => ChangeVal(p)。 C++ lambda 表达式的语法是什么?
最佳答案
正如安德斯在他的回答中指出的那样,boost::lambda 可能很有用,但在某些情况下代码会变得难以阅读。因此,这取决于您想在匿名函数中执行的操作。
对于像您在问题中提到的 p => p * 5
这样的简单情况,在我看来,使用 Lambda 或 Bind 是合理的,不过:
DoSomething(1, _1 * 5);
编辑:您的第二个示例击中了语法很快变得冗长的一个区域:成员(数据或函数)访问。因为“点”运算符不能在 C++ 中重载,所以必须使用绑定(bind)表达式从参数中获取“x”:
DoSomething(1, bind(&NumHolder::x, _1) * 5);
或者,对于 Boost.Lambda,使用重载的 ->* 运算符:
DoSomething(1, &_1->* &NumHolder::x * 5);
编辑 2:好的,最后一次 :)在你的最后一个问题中,你用 C# 编写了 p => ChangeVal(p)
,但是上面的代码显示了一个 ChangeVal
接受一个 int,而不是一个NumHolder,所以不清楚你的意思。
假设 ChangeVal 采用一个 int 并且您希望匿名函数执行与 ChangeVal(the_arg.x)
等效的操作,您将使用 Boost.Lambda 编写此代码:
DoSomething(1, bind(&ChangeVal, &_1->*&NumHolder::x));
或与 Boost.Bind 一起使用(也适用于 Lambda):
DoSomething(1, bind(&ChangeVal, bind(&NumHolder::x, _1));
关于c++ - 可以使用带有 boost 的 C++ 匿名函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580123/
所以 promises 对我来说是相当新的,但我喜欢这个想法。 之前... 我以前用过这个,它只在文件被完全读取并按预期工作后才简单地返回数据: function something{ fo
当我尝试编译时出现以下错误: In member function 'double search::IDAstar::dfs(const State&, double)': 153:18: erro
最接近下面的是什么?不幸的是,下面的方法名称编译错误。 int val = delegate(string s) { return 1; }("test"); 我也尝试了 (...)=>{..
1、评论提交超时: 大家可能会发现,在提交评论非常缓慢时最容易出现“匿名”现象,这种情况主要是由于评论提交时执行时间过长引起的,可能是装了比较耗时的插件(比如Akismet等);很多博
我想在同一个表中使用一个键插入一个匿名表,如下所示: loadstring( [[return { a = "One", b = a.." two" }]] ) 在我看来,这应该返回下表: {
有人知道免费的匿名 smtp 服务吗?我想让我的应用程序的用户能够偶尔向我发送一封匿名电子邮件,而无需配置输入他们电子邮件帐户的服务器。我想我可以为此目的设置一个 gmail 帐户并将凭据嵌入到应用程
我有这个数据补丁: ALTER TABLE MY_TABLE ADD new_id number; DECLARE MAX_ID NUMBER; BEGIN SELECT max(id)
假设我有以下数据框。 Person_info (Bob, 2) (John, 1) (Bek, 10) (Bob, 6) 我想通过保持它们的值(value)来匿名。 Person_info (Pers
根据多个国家/地区的法律要求,我们在日志文件中匿名化用户的 IP 地址。使用 IPv4,我们通常只是匿名化最后两个字节,例如。而不是 255.255.255.255我们记录255.255.\*.\*
我正在学习有关 Scala 的更多信息,但在理解 http://www.scala-lang.org/node/135 中的匿名函数示例时遇到了一些麻烦。 .我复制了下面的整个代码块: object
我正在开设一个 Commerce 网上商店。 我想添加 Commerce 愿望 list ,但现在该模块仅适用于注册用户,因为未注册它不起作用。 我将显示 block 中的角色设置为匿名,但即使在更改
我正在使用发现的 Google Apps 脚本 here让匿名用户将文件上传到我的 Google 云端硬盘。 我想要的是脚本使用表单上输入的名称创建一个文件夹,然后将文件存放在该文件夹中。 到目前为止
我遇到的情况是,我正在等待一些事件的发生。我看到很多关于如何使用命名函数使用 setTimeout 的好例子,但是有没有办法使用某种匿名方法来设置超时? 代码目前看起来像这样: testForObje
我一直在阅读一些关于 Android 内存泄漏的文章,并观看了来自 Google I/O 的这个有趣的视频 on the subject . 尽管如此,我仍然不完全理解这个概念,尤其是当它对用户安全或
我正在尝试适应 Spring JDBC,但让我烦恼的是使用这些匿名类,我们不能传递任何局部变量,除非它们是最终的,这可能很容易安排,但是如果我需要循环一个怎么办?数组还是集合?我无法将“FedMode
我正在尝试将数据输入到 Oracle 数据库中。这将是一个带有多个参数的存储过程……我的意思是像 27 个参数(别问,我没有设计它)…… 现在我必须以某种方式填充此存储过程的参数...存储过程采用的大
我之前问过这个问题:Combine a PartialFunction with a regular function 然后意识到,我实际上并没有问对。 所以,这是另一个尝试。 如果我这样做: va
我想从 C++ 执行一个匿名的 Qt 脚本函数,但不知道要使用的 QScriptContext。 这是脚本: { otherObject.Text = "Hello World"; setTi
我有一个返回 promise 的函数。 (本例中为 foo) 我尝试在声明为匿名的解析函数中调用此函数。 我已经尝试过使用this 但这不起作用。 我的代码是这样的 var foo = functio
这个问题的灵感来自这个 excellent example .我有 ASP.NET Core MVC 应用程序,我正在编写 unit tests为 Controller 。其中一种方法返回带有匿名类型
我是一名优秀的程序员,十分优秀!