boost 中round和roundf函数的用法

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) 将会加速编译时间,减小目标文件的大小,而且还可以加快调试运行时间。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值