自定义库文件中的函数如何获取流场单元的压力?
-
因为像什么volScalarField都是GeometricField<>的typedef,而GeometricField->DimensionedField->regIOobject->IOobject(继承)。regIOobject的构造函数有
if (registerObject()) { checkIn(); }
registerObject()返回registerObject_,这个成员变量默认为true。因此会执行 checkIn(),
registered_ = db().checkIn(*this);
db()继承自ioObject,
const objectRegistry& db() const;
而objectRegistry的checkIn中
return const_cast<objectRegistry&>(*this).insert(io.name(), &io);
会把当前的场(p)插入自己的列表,进行注册了。所以以后只要通过objectRegistry就能lookupObject<>到。
而mesh,也就是fvMesh,fvMesh->polyMesh->objectRegistry(继承)。可以看到fvMesh继承自objectRegistry,因此可以直接用lookupObject<>直接查找到p。
到这里就会有个问题,objectRegistry是类名,可以生成多个对象,怎么确保大家都查找到同一个的objectRegistry呢?在同一个列表中查找到场呢?因此这里就需要使objectRegistry在整个程序中只生成一个独一无二的对象,这样大家都访问的是同一份列表了。因此,设计模式中的单例模式(Singleton Pattern)就发挥作用,至于怎么实现,那就看看设计模式吧。