有没有办法将一些函数或运算符作为参数提供?

时间:2011-03-18 13:06:36

标签: c++ boost c++11

有没有办法为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。

那么有一些方法可以做到吗?

3 个答案:

答案 0 :(得分:6)

您可以通过制作参数,例如test std::tr1::function

void test(std::tr1::function<void(DWORD)> func) {
    func(0);
}

您可以使用函数,成员函数甚至lambda来调用它:

test([](DWORD param) { return; });

答案 1 :(得分:1)

答案 2 :(得分:0)

那里有stuff in boost吨。

但是,我通常建议不要过于深入。问题是,在增强中像lambdas这样的东西的实现变得非常复杂。我已经看到VS的编辑需要几分钟才能获得单个源文件,如果你做错了什么,你会得到ludicrously long unreadable error messages

实际上,消息在某种程度上是可读的,但前提是您非常熟悉所涉及的所有boost对象的实现。恕我直言,设施的客户不应该对设施如何编码使用它的内部知识有太多了解。