boost 中round和roundf函数的用法

来源:互联网 发布:sql 格式化 java代码 编辑:程序博客网 时间:2024/06/01 19:56

round()和roundf()函数是我在hog3D源码中碰到的,编译的过程中总是报错,通过网上查找发现round()函数和roundf()函数都是C++ boost库中的函数,如果需要调用这两个函数,需要:

注:我是在vs2012的环境下进行编译的,所以需要先下载boost库,然后对vs2012做相应的配置,具体步骤可参考:http://blog.csdn.net/chenkent888/article/details/10229369

(1)添加引用头文件:

#include <boost/math/special_functions/round.hpp>   //对应于round()函数的头文件

#include <boost/math/tr1.hpp>   //对应于roundf()函数的头文件

(2)由于在 boost::math::tr1命名空间中支持C99中的函数

double round(double x);float roundf(float x);long double roundl(long double x);

在 boost::math命名空间中,定义的round()函数为:

template <class T, class Policy>inline T round(const T& v, const Policy& pol){   BOOST_MATH_STD_USING   if(!(boost::math::isfinite)(v))      return policies::raise_rounding_error("boost::math::round<%1%>(%1%)", 0, v, v, pol);   return v < 0 ? static_cast<T>(ceil(v - 0.5f)) : static_cast<T>(floor(v + 0.5f));}template <class T>inline T round(const T& v){   return round(v, policies::policy<>());}
所以,在函数中使用round()函数和roundf()函数时需要加上命名空间,使用

boost::math::round(),这时候调用的即为上面的模板函数

boost::math::tr1::roundf(),调用的就为c99中的 float roundf(float x)函数。

注:添加命名空间的好处不仅能够区分不同命名空间定义的相同函数,而且对于开发的大规模的软件,它的编译时间是很长的,boost库已经在系统中安装创建,然后添加#include <boost/math/tr1.hpp> 并且使用 boost::math::tr1::roundf(x) 将会加速编译时间,减小目标文件的大小,而且还可以加快调试运行时间。



原创粉丝点击