CollidingCloud构造函数后面的 CloudType()是什么?
-
各位老师好,本人在学习C++和研读拉格朗日库中的CollidingCloud.C时,发现构造函数定义如下:
Foam::CollidingCloud<CloudType>::CollidingCloud ( const word& cloudName, const volScalarField& rho, const volVectorField& U, const volScalarField& mu, const dimensionedVector& g, bool readFields ) : CloudType(cloudName, rho, U, mu, g, false), ...
在CollidingCloud.H中发现,CloudType是CollidingCloud的一个基类,此处冒号后的CloudType()是不是CloudType类的构造函数呢?然而我并没有找到CloudType类的定义及其构造函数,还望大佬帮忙解释一下
-
-
-
@bestucan 老师您好,我想请教一下kinematicCloud.H 里面的274行
template<class TrackCloudType> void solve ( TrackCloudType& cloud, typename parcelType::trackingData& td );
TrackCloudType& cloud,里面的cloud是在cloud.H里面定义的类,但是在kinematicCloud.C 里面的140行直接调用了kinematicCloud类的成员函数cloud.preEvolve(td)。这是为什么呢?还是说这里的cloud指的就是kinematicCloud?
-
这个 cloud 是一个 TrackCloudType 类的引用,
这个 TrackCloudType 具体是什么,看调用 solve 函数的时候这里填的是什么类的引用,
用 preEolve 没法判断,因为这是个模板函数,符合模板的类八成有共同的机构,要不编译也过不去。就是说,不只 kinematicCloud 有 preEvolve 这个函数。
但是在kinematicCloud.C 里面的140行直接调用了kinematicCloud类的成员函数cloud.preEvolve(td)。
cloud.preEvolve(td) 不是 kinematicCloud 的成员函数。
cloud 是 TrackCloudType& 类型的变量,具体 TrackCloudType 取决于调用。
preEvolve 是 cloud 的成员函数
要想通过 preEolve 判断 cloud 的可能类型,可以直接搜这个函数
或者看调用 solve 的时候,第一个参数填的具体是什么
-
@bestucan 刚看了一下CollidingCloud.C,引用了solve函数:
template<class CloudType> void Foam::CollidingCloud<CloudType>::evolve() { if (this->solution().canEvolve()) { typename parcelType::trackingData td(*this); this->solve(*this, td); } }
我个人的理解是,这里的*this指针指的就是CollidingCloud,因此cloud.preEvolve就是CollidingCloud.preEvolve, 而preEvolve是KinematicCloud的public的成员函数,CollidingCloud是其衍生类,因此可以直接调用了preEvolve函数