boost utility

utility:
 utility库不是一个有同意主题的Boost库,而是包含了若干个很小但有用的工具

BOOST_BINARY:
 BOOST_BINARY提供一组宏,用于实现简单的二进制常量表示.
 BOOST_BINARY的定义位于<boost/utility/binary.hpp>中,也可以通过<boost/utility.hpp>间接包含。
#include <boost/utility/binary.hpp>
或者
#include <boost/utility.hpp>
 它使用boost.preprocessor预处理元编程工具将一组或多组01数字在编译期展开成为一个八进制数字。每个数字组之间可以用空格分隔,每组可以容纳1个到8个0/1数字。
 注意:数字组的长度一定不能超过八个,由于预处理宏展开的限制,嵌套层次太深会导致无法通过编译,报出一大堆错误。
示范:BOOST_BINARY用法的例子如下:
#include <iostream>
#include <bitset>
#include <assert.h>
#include <boost/utility.hpp>
using namespace boost;
using namespace std;
int main()
{
 cout<<hex<<showbase;
 cout<<BOOST_BINARY(0110)<<endl;
 cout<<BOOST_BINARY(0110 1101)<<endl;
 cout<<BOOST_BINARY(10110110 01)<<endl;
 cout<<bitset<5>(BOOST_BINARY(0110))<<endl;
 system("pause");
 return 0;
}
除了最基本最通用的BOOST_BINARY宏外,本组件还包含形如BOOST_BINARY_XXX的宏,其中XXX是标准的整数后缀,如U(unsigned int),UL(unsigned long)等,用以支持需要特定整数类型的地方,例如:如果编译器支持long long(64位整数),则对应的宏是BOOST_BINARY_LL;
示范:
cout<<BOOST_BINARY_UL(101 1001)<<endl;
long long x = BOOST_BINARY_LL(1101);
cout<<x<<endl;
 BOOST_BINARY宏提供了很好的初始化操作方法,在某些需要按位操作的情况下特别有用,比如使用std::bitset,而且BOOST_BINARY宏都是在编译期展开的,没有任何运行时开销.

BOOST_CURRENT_FUNCTION:
 微软编译器(VC)在c89的__FILE__和__LINE__之外定义了一些扩展宏,其中的__FUNCTION__宏可以表示函数名称,GCC,intel C等编译器也定义有类似的宏,而C99标准则定义了__func__宏以实现同样的功能。但目前的c++98标准不能这样做。
 BOOST_CURRENT_FUNCTION宏为c++补充了这个功能,而且功能更强大,更具可移植性。
用法:
#include <boost/current_function.hpp>
 只需要在代码中使用BOOST_CURRENT_FUNCTION宏,就可获得包含该宏的外围函数名称,它表现了一个包含完整函数声明的编译期字符串,如果BOOST_CURRENT_FUNCTION宏不处于任何函数作用域之内,则行为依编译器而不同(在vc上会报出编译错误)。

示范:BOOST_CURRENT_FUNCTION宏的用法:
#include <iostream>
#include <bitset>
#include <assert.h>
#include <boost/current_function.hpp>
using namespace boost;
using namespace std;
double func(int i)
{
 cout << BOOST_CURRENT_FUNCTION<<endl;
 return 0.0;
}
//string str = BOOST_CURRENT_FUNCTION;/err
int main()
{
 cout<<__FUNCTION__<<endl;
 cout<<BOOST_CURRENT_FUNCTION<<endl;
 func();
 system("pause");
 return 0;
}

实现原理:
 BOOST_CURRENT_FUNCTION宏是针对各种编译器把编译器特定的宏定义为BOOST_CURRENT_FUNCTION,因此它的能力完全依赖于编译器.
例如对于VC:
#define BOOST_CURRENT_FUNCTION __FUNCSIG__
而GCC则是:
#define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值