我正在尝试解决匿名函数变得非常容易的问题,并且想知道这在 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 表达式的语法是什么?