我有以下内容:
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
的构造函数中的几个函数初始化此结构。 1}}构造函数。这是什么标准方法?
答案 0 :(得分:0)
你 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
实例,请使用辅助方法技巧对其进行初始化,然后使用它来初始化网格:
SEMPotential(/* args */) : SI(ipsum_creator(args)), mesh(SI) {}
保证成员的初始化顺序(它们在类中出现的顺序,初始化列表中的顺序无效)。