您的位置:首页 > 编程语言

模板元编程----boost组件基础

2014-03-11 21:38 190 查看

模板元编程----boost组件基础

1、特点

1)模板元编程产生的元程序---在编译期执行的程序

2)操作的对象---不是普通变量,因而不是使用运行时的C++关键字如(if,else ,for)

3)常用的是编译期的整数常量:enum,static

2、模板元编程与普通编程的区别

模板元编程与普通运行时编程的不同点:

1)普通程序时运行时处理数据;

2)元数据不同普通的运行时变量,是抽象数据类型,编译期可操作;

例如元数据:meta1,meta2

typedef int meta1;

typedef std::vector<float>meta2;

3) 元函数:实际表现为C++的一个类或模板类.

元函数返回值:因为元编程不能使用运行时关键字,所以不能return 返回计算结果,需要在元函数内部用typedef
定义一个名为type的类型或value的值作为返回值。

可以用typedef
返回任意多个返回值(>=0个,同普通函数)


元函数参数---模板参数列表的模板参数

实参---------元函数被调用时的真正类型

3、元编程实例

1)编译期计算2个整数的和



template<int N,int M>

struct add1

{

BOOST_STATIC_CONSTANT(int,value=N+M);//编译期计算

};

cout<<add1<10,10>::value<<endl;

int i=2,j=3;

cout<<meta_func1<i,j>::value<<endl;错误,i,j,是运行时变量
2)编译期求两数的最小值

template<int N,int M>

struct min

{

static const int value=(N<M)?N:M;//编译期计算

};

cout<< min<9,10>::value<<endl;
--------------------------------------------------------------------------------------------------------------------------

模板元编程库:type_traits

类型特征提取----模板元编程的基础

type_traits提供元函数,编译期确定类型(元数据)是否具有某些特征,例如

是否是原生数组,是否是整数

以is_,has_开头,

is_integral<T>

is_float<T>

is_void<T>

is_array<T>

is_class<T>

is_enum<T>

is_union<T>

is_complex<T>

is_pointer<T>

is_lvalue_reference<T>

is_function<T>

is_member_object_pointer<T>成员变量指针

STL中相关的traits技法见博文链接:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/19416057
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: