我有类似以下内容:
QuadMesh.h:
#include "StructureIpsim.h" // this is a struct
class QuadMesh {
public:
QuadMesh(StructureIpsim s) {//do stuff}
};
SEMPotential.h:
#include "QuadMesh.h"
#include "SpecialFuncs.h"
class SEMPotential {
public:
StructureIpsim SI;
QuadMesh mesh;
SEMPotential( //args);
};
SEMPotential::SEMPotential( //args) {
// init structure in here, need to call functions from SpecialFuncs.h to do so
// How to construct the QuadMesh object mesh? Can't put in initialization list.
}
正如你所看到的QuadMesh
物体发生在一个StructureIpsim
sruct,但是这个结构必须在构造函数中使用多项功能进行初始化SEMPotential
传递给之前QuadMesh
的构造。解决此问题的标准方法是什么?
您CAN使用初始化列表。使用帮助程序函数,该函数可能应该是私有的静态成员函数,该函数接受相关参数,进行计算并返回一个QuadMesh
对象。使用初始化列表从该帮助程序的返回值初始化成员。
class SEMPotential
{
static QuadMesh mesh_creator( /* args */ );
public:
QuadMesh mesh;
SEMPotential(/* args */) : mesh(mesh_creator(args)) {}
};
QuadMesh SEMPotential::mesh_creator( /*args*/ )
{
StructureIpsum s;
// init structure in here, calling functions from SpecialFuncs.h to do so
return QuadMesh(s);
}
正如Matt McNabb在评论中指出的那样,该辅助函数可以是的构造函数StructureIpsum
。但是我提出了一个不需要修改StructureIpsum
或QuadMesh
类定义的解决方案。
如果要保留StructureIpsum
实例,请使用helper方法技巧对其进行初始化,然后仅使用它来初始化网格:
SEMPotential(/* args */) : SI(ipsum_creator(args)), mesh(SI) {}
保证成员的初始化顺序(这是它们在类中出现的顺序,初始化列表中的顺序无效)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句