模板元编程----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
相关文章推荐
- C++ boost 组件简介:泛型编程与模板元编程
- .NET组件编程(1) 基础
- boost 模板元编程概述
- [Java]Swing基础编程【1】基本组件的使用
- C++自动化(模板元)编程基础与应用
- 编程:Boost组件lexical_cast
- 基于Boost::asio库的网络编程实现基础
- LinuxC/C++编程基础(15) boost同步socket处理
- STL源码剖析 08 基础-模板元编程 在编译期的时候做出计算和类型推倒等
- Windows窗体编程基础学习:使用 NotifyIcon 组件向任务栏添加应用程序图标
- 组件编程基础
- 面向基础系列之---Java网络编程---网络连接组件的使用(URLConnecti 3ff8 on)
- [引]Windows窗体编程基础学习: 对话框组件
- 『参考』.net CF组件编程(1)——基础之后
- [引]Windows窗体编程基础学习: 对话框组件
- atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系
- LinuxC/C++编程基础(7) boost::mutex的简单实例
- 基于Boost::asio库的网络编程实现基础
- 组件编程(1) 基础
- [引]Windows窗体编程基础学习: 对话框组件