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 谢谢大佬,我知道冒号是初始化的意思,我想问的是这个CloudType是什么?是不是就是指的kinematicCloud?因为CollidingCloud是由kinematicCloud继承来的
-
-
@bestucan 好的谢谢您,我去看一下
-
@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 感谢大佬的解答,非常详细。我主要的问题也是没有看到有模板参数的函数是在哪里调用的?例如solve函数的调用。我用的是DPMFoam,在DPMFoam.C里也没有看到调用,如果能看到调用函数就能知道TrackCloudType指的是什么了。大佬能否指点一下去哪里看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函数
-
-
@bestucan 好的,非常感谢大佬的指点!