高分求C++ boost库 BOOST_AUTO宏的原理,
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 15:33:51
高分求C++ boost库 BOOST_AUTO宏的原理,
在vs2008环境,boost库(忘了什么版本了)
#include
using namespace std;
int test()
{
static int a = 0;
++ a;
return a;
}
int main()
{
BOOST_AUTO(b,test());
int a = 0;
++ a;
//test();
}
宏展开是boost::type_of::msvc_typeid_wrapper::type b = test();
编译结果只有两句话
0041140E call test (41107Dh)
00411413 mov dword ptr [b],eax
跟 int b = test();是一样的.
那么,boost::type_of::msvc_typeid_wrapper::type是怎么变成int的呢
在vs2008环境,boost库(忘了什么版本了)
#include
using namespace std;
int test()
{
static int a = 0;
++ a;
return a;
}
int main()
{
BOOST_AUTO(b,test());
int a = 0;
++ a;
//test();
}
宏展开是boost::type_of::msvc_typeid_wrapper::type b = test();
编译结果只有两句话
0041140E call test (41107Dh)
00411413 mov dword ptr [b],eax
跟 int b = test();是一样的.
那么,boost::type_of::msvc_typeid_wrapper::type是怎么变成int的呢
主要是利用模板片特化,
模板参数不仅仅可以实现还能是整形数
你看这个
template
struct msvc_typeid_wrapper {
typedef msvc_typeid_wrapper type;
};
它实际上就是一个片特化,如果模板参数是1(这个1往往又利用枚举的值来传递),至于变成int,主要是是下面的宏与条件编译联合作用的结果
# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
struct name {\
BOOST_STATIC_CONSTANT(int,_typeof_register_value=sizeof(boost::type_of::typeof_register_type(expr)));\
typedef typename boost::type_of::msvc_extract_type::id2type id2type;\
typedef typename id2type::type type;\
};
模板参数不仅仅可以实现还能是整形数
你看这个
template
struct msvc_typeid_wrapper {
typedef msvc_typeid_wrapper type;
};
它实际上就是一个片特化,如果模板参数是1(这个1往往又利用枚举的值来传递),至于变成int,主要是是下面的宏与条件编译联合作用的结果
# define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
struct name {\
BOOST_STATIC_CONSTANT(int,_typeof_register_value=sizeof(boost::type_of::typeof_register_type(expr)));\
typedef typename boost::type_of::msvc_extract_type::id2type id2type;\
typedef typename id2type::type type;\
};
高分求磁性黑板的工作原理
boost斩波升压的详细原理及电路图
求boost,develop,improve,promote,enhance,elevate的区别
boost开关电源的意义
高分求做计算机通讯原理题
boost和improve的区别?
高分求一篇10000字符关于对讲机原理或设计的英文文献
高分求间接碘量法的原理及实验方案(最好测VC)
跪求《过秦论》与《六国论》区别的论文,高分高分高分高分高分高分!跪求跪求跪求跪求跪求跪求!
高分求高手,解答微机原理与接口技术几道题!
在通过vs2010使用boost的date_time库时出现 error C2039:'nullptr_t' :is n
Boost升压电路的问题!急!