2014-03-28 31 views
0

我想让我的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; 
}; 
+0

有什么问题与您当前的代码? (对于没有准备好编译器的thost来试试它...) – anderas

+1

首先,你*知道如何编写[lambda表达式](http://en.cppreference.com/w/cpp /语言/λ)? –

+0

@KonradRudolph,非常感谢您的正确问题标题) –

回答

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(); } 
+0

我有'.cpp:15:1:错误:'函数'在名字空间'std'没有在代码行上命名一个类型'std :: function getEnd ()'如何正确地声明返回lambda的函数? –

+0

你缺少'#包括' – bobah

+0

感谢结构作为一个功能的例子,但我的一般目标是了解lambda表达式...如何正确地声明一个返回lambda函数?你的第一个代码返回错误(我已经添加'#包括') –