正文

OpenFOAM——primitive--bool & int & label2006-11-16 19:44:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bioexplore/20384.html

分享到:

今天介绍OpenFOAM中实现的几个最基本的东西:bool、 int及label在介绍这几个之前首先介绍一个特殊的类pTraits(primitive trait的简写,意思即为primitive类的基本特征),正如其名字所示该类用于描述所有primitive类的基本特征。那么primitive类都有哪些基本特征呢,让我们来看看类pTraits的定义:template<class primitive>class pTraits: public primitive        //这里可以看出来pTraits为primitive的子类{public:    pTraits(Istream& is)    : primitive(is) {}};是不是很简单啊,不过对于每一个具体的primitive类型,pTraits类都进行了特化。因为是primitive类的子类所以可以通过特化为特定的primitive类加上我们希望它具有的特性。 下面分别从bool、label介绍pTraits的这种特化: 对于bool,特化了pTraits<bool>成员变量(私有):           bool   p_;     //私有的数据成员公有属性:        静态常量成员://所有的pTraits<primitive>都实现了以下几个常量               static const char* const typeName="bool";               static const char* componentNames={"x"};               static const bool zero=0;               static const bool one=1;       类型定义:               typedef   bool   cmptType;//所有的pTrait都有这个类型 cmptType       成员常量:               enum  {                              dim                   =   3;    //定义三维定义                              rank                  =   0;    //定义bool型(实际为pTraits<bool>)的秩                              nComponents  =    1;   //定义元素个数                          };    构造函数:              pTraits(Istream & is);     //从输入流构造类       成员函数:              operator bool() const {return p_;}   //类型转换函数全局函数:        bool  readBool(Istream & is);                //从输入流中读入bool变量对于label,特化了pTraits<label>成员变量(私有):           label   p_;     //私有的数据成员公有属性:        静态常量成员://所有的pTraits<primitive>都实现了以下几个常量               static const char* const typeName="label";               static const char* componentNames={"x"};               static const bool zero=0;               static const bool one=1;       类型定义:               typedef   label   cmptType;//所有的pTrait都有这个类型 cmptType       成员常量:               enum  {                              dim                   =   3;    //定义三维定义                              rank                  =   0;    //定义bool型(实际为pTraits<bool>)的秩                              nComponents  =    1;   //定义元素个数                          };    构造函数:              pTraits(Istream & is);     //从输入流构造类       成员函数:              operator label() const {return p_;}   //类型转换函数全局函数:        label   readLabel(Istream& is) //从输入流读取label变量        label   pow(label a,   label b);// 返回a的b次幂        label   nCr(label n,    label r); //Cnr,组合数        label   factorial(label n);//n的阶乘        label   mag(label n); //n的绝对值        label   sign(label n); //n的符号 n>=0返回1,n<0返回-1        label   pos(label n); //n>0返回1,否则返回0        label   neg(label n);//n<0返回1,否则返回0 通过上面的介绍,可以看出pTraits<primitive>将为primitive增加以下这些属性:        cmptType;//表明primitive的元素类型        rank;//primitive的秩        dim;//primitive所属空间的维数        nComponets;//primitive中元素个数        typeName;//类的名字        componentNames[];//类的成员的名字       zero;该类的零primitive        one;该类的单位primitive今天到这里!<未完,待续……>

阅读(5346) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册