openFoam源码&C++

openFoam源码中涉及到的c++思想有很多,因为在计算流体力学中,域的创建尤为重要,我们可以在域中存储我们想要的物理变量如速度、压力等等。
首先:有一个宏观上的思维,我们用的大多数域对应的C++类是GeometricField,这个类里面包含了很多信息,但他的Base类其实是Field这个类,可以用下图来表示这个关系:

在这里插入图片描述
在这里插入图片描述
分析
当然,一切要从代码看起:
首先看Field基类,找到Filed的.C和.H头文件开始分析:
该类都是在Foam这个大的命名空间底下,下面定义了很多模板类。

template
class Field;

//- Pre-declare related SubField type
template
class SubField;

template
void writeEntry(Ostream& os, const Field&);

template
Ostream& operator<<(Ostream&, const Field&);

template
Ostream& operator<<(Ostream&, const tmp<Field>&);
// 类的前置声明
class dictionary;
复制
这里用到了很多模板类的语法,首先声明了两个模板类的前置声明Field以及SubField,在这里要注意的是为什么要进行前置声明:

由于某些原因不方便在头文件中直接引入另一个模板类的头文件,但声明变量是需要用到该模板类型,这时候就要用到模板类的前置声明
可以看到操作符重载的参数列表里用到了Field,这就必须进行前置声明,可能此时大家又有疑问,为什么操作符的重载也要进行前置声明呢,这是可以看到在Filed这个大的模板类里有这样一段友元函数的声明:

在这里插入图片描述
在这里插入图片描述

有这样一条规定:友元函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值