有没有办法为C ++带来一些函数式编程,我想将一些LAMBDA函数或运算符作为参数传递给另一个函数。
例如:
void test(DWORD foo)
{
try { __asm { call foo; } } // very weird way, don't think that could work
catch (...) { () }
}
或:
void test2(DWORD foo)
{
someconnection.Open();
__asm { call foo; } // very weird way, don't think that could work
someconnection.Close();
}
和用法相似:
int main ()
{
...
dosomething();
...
void operator()(int n) // lambda expression, not sure if that correct way creating them
{
dosomething();
dosomethingelse();
}
test ( *operator(5) ) // here is what I want
test2 ( *operator(10) ) // here is what I want
...
dosomethingelse();
...
}
我正在使用Visual Studio 2010并且不确定我是否可以在那里使用C ++ 0x但是如果可以做我想做的事情,我可以使用boost。
那么有一些方法可以做到吗?
答案 0 :(得分:6)
您可以通过制作参数,例如test
std::tr1::function
:
void test(std::tr1::function<void(DWORD)> func) {
func(0);
}
您可以使用函数,成员函数甚至lambda来调用它:
test([](DWORD param) { return; });
答案 1 :(得分:1)
查看函数对象(仿函数):http://en.wikipedia.org/wiki/Function_object
和lambda in boost:http://www.boost.org/doc/libs/1_46_0/doc/html/lambda.html
答案 2 :(得分:0)
那里有stuff in boost吨。
但是,我通常建议不要过于深入。问题是,在增强中像lambdas这样的东西的实现变得非常复杂。我已经看到VS的编辑需要几分钟才能获得单个源文件,如果你做错了什么,你会得到ludicrously long unreadable error messages。
实际上,消息在某种程度上是可读的,但前提是您非常熟悉所涉及的所有boost对象的实现。恕我直言,设施的客户不应该对设施如何编码使用它的内部知识有太多了解。