一个IOobject是如何构造的
简单描述:在OF的各种类的构造中都涉及到IOobject的构造,因而这里对其构造进行一个详细的分析。其实单纯从IOobject类构造函数的组织来看是非常简单的,它的所有工作都是在初始化列表中进行的。
IOobject类为一个对象定义属性并且提供一个隐含的objectRegistry管理器,并为流输入输出提供基础。其构造由一个对象名,一个类名,一个实例路径,一个objectRegistry的引用,以及相应的表明存储状态的参数。
该类具有10个私有变量:
word name_;
word headerClassName_;
string note_;
word instance_;
fileName local_;
const objectRegistry& db_;
readOption rOpt_;
writeOption wOpt_;
bool registerObject_;
objectState objState_;
其中headerClassName_,note_,objState_等三个成员变量在构造时是无需显式给出的,
如:
headerClassName_在构造时就是IOobject运行时类别的typeName的值,对于IOobject对象来说即IOobject,
note_在构造时空缺,
objState_构造时都是GOOD。
因而这三个变量在构造时可无需通过构造参数给出,另外还有三个在构造函数的参数中都提供了默认值,
rOpt_=NO_READ,
wOpt_=NO_WRITE,
而registerObject_=true.
local_有时在构造时也可以保持为空,这样就衍生出了该类目前所提供的两个构造函数:
其中一个构造函数含有六个形参,这六个参数及其对应的成员变量名分别为:
const word& name-->name_,
const word& instance-->instance_,
const objectRegistry& registry-->db_,
readOption ro-->rOpt_,
writeOption wo-->wOpt_,
bool registerObject-->registerObject_
而另外一个构造函数除提供上述六个形参外,还提供了:
cosnt fileName& local-->local_
因此在构造一个IOobject的对象时最少只用提供三个实参,用来指出name_,instance_和db_;
例如:
IOobject
(
"T",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
);
这段代码将构造一个IOobject的对象,该对象的名字(name_)为"T",实例路径(instance_)为runTime的当前时间值表示的文件夹,对象注册器(objectReistry)为mesh,读选项(rOpt_)为MUST_READ,写选项(wOpt_)为AUTO_WRITE,其余的五个成员变量的取值如下:
local_();
headerClassName_(IOobject);
note_();
objState_(GOOD);
registedObject_(true);