区别

2014-03-26 37 views
3

我试图使用condition_variable_any::timed_wait()区别

当我通过boost::chrono::millisecond到函数,它未能编译:

error: no match for ‘operator+’ in ‘boost::get_system_time() + wait_duration’ 

但是,如果我将boost::posix_time::milliseconds传递给它编译的函数。

问题是我不明白两者之间的区别。他们都声称是持续时间。但是据我所知,POSIX时间代表了自纪元以来的时间,这对我而言意味着boost::posix_time::milliseconds p(1000)代表了纪元后1秒的时间。我不认为这是一个持续时间。

我错过了什么?有人能解释一下这些差异吗?

+2

您错过了对强打字的基本理解。 –

回答

3

虽然我不是开发人员或标准委员会的一部分,但我会对其进行刺探。

Boost是一个想法的游乐场,可能有一天会融入到标准库中。因此,在其他地方你会看不到其中的怪癖。

boost :: posix_time是posix_time数据结构的一个包装。 POSIX(便携式操作系统接口)是IEEE为了让所有操作系统和程序以类似的语言(扰流器,他们没有)说话而提出的一套标准。 POSIX为时间和时间差异定义了一个定点数字系统,尽管该结构的分辨率有所不同。在BOOST中,分辨率可以在编译时进行配置。该库的目标是更容易地操纵POSIX complient time strucures。 1.31之前推出。

boost :: chrono(作为std :: chrono集成到C++ 11中)是一个通用的时标库。目标是建立一套可以很好地处理时间并允许用户配置底层数据类型的功能和结构。没有任何努力符合任何标准。在1.51中引入。

虽然这是(100%)两个图书馆做同样的事情,他们在做一个稍微不同的方式。在像boost这样的系统中,这无疑是不可避免的:有了新的语言特性和编程需求,您可能需要完全折射一些东西,但需要保持(稍微)向后兼容性。但它会导致一个奇怪的问题:不同的实施,只是为了混淆你。由于POSIX时间比较老,大多数接口(如condition_variable_any :: timed_wai)只有一个posix_time接口。