如何从函数返回闭包?

时间:2014-03-28 09:17:51

标签: c++ function lambda

我希望我的getEnd函数返回一个开始保存的闭包。

当我调用此闭包时,它应该返回时间差...

如何在c ++中实现它?

接下来的事情:

using namespace std;

long microtime() {
  timeval time;
  gettimeofday(&time, NULL);
  long microsec = ((unsigned long long)time.tv_sec * 1000000) + time.tv_usec;
  return microsec;
}


std::function<void()> getEnd (){
  long start = microtime();
  long end() {
    return microtime() - start;
  }
  return end;
};

1 个答案:

答案 0 :(得分:2)

#include <functional>
std::function<long()>  getEnd()
{
    long const start = microtime();
    return [=]{ return microtime() - start; };
}

请注意,上面将在堆上分配内存,因此对于大多数实际应用来说,更好的选择是

struct timer {
     long const start;
     timer(): start(microtime()) {}
     long operator()() { return microtime - start();  }
};

timer getEnd() { return timer(); }