正文

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
今天到这里!

<未完,待续……>

阅读(4833) | 评论(0)


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

评论

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