我希望能够从Element类访问我的Mesh类中的所有节点。我相信我已经正确设置了这两个类,但是我不清楚在Element中初始化静态指针到Mesh的最佳实践。你通常为此做些什么?
谢谢!
代码(到目前为止)
// Mesh.h
#pragma once
#ifndef MESH_H
#define MESH_H
#include <vector>
#include <map>
#include "Eigen/Eigen"
#include "Element.h"
#include "Node.h"
class Mesh {
public:
std::vector< Node* > m_Nodes;
std::vector< Element* > m_Elements;
Eigen::MatrixXd m_K;
Eigen::VectorXd m_F;
Eigen::VectorXd m_u;
void Mesh::LoadFile(wchar_t* MeshFile);
};
#endif
// element.h展开
#pragma once
#ifndef ELEMENT_H
#define ELEMENT_H
#include <vector>
class Mesh;
class Element {
public:
static Mesh * m_Parent;
static int m_ElementCount;
int m_ElementIndex;
std::vector< int > m_ElementNodes;
};
#endif
答案 0 :(得分:1)
我对你的帖子发表评论缺乏声誉,所以我必须在这里发帖。
为什么不让每个Element实例都有自己的父指针?每个指针都可以指向同一个Mesh对象。记忆储蓄真的那么重要吗?
即使你最终得到一个单例网格,如果将来你想要扩展到多个网格,每个网格都有一组元素,那么更改将更容易。
如果你做需要有一个指向父网格的静态指针,你可以在Mesh方法中封装元素的构造,并将父指针设置为 this 在Mesh的构造函数中。
答案 1 :(得分:0)
您必须定义静态指针(在任何源文件中;不在*.h
中):
Mesh* Element::m_Parent; // initialized to NULL by the system
此外,要初始化它,请使用以下语法:
Element::m_Parent = whatever;
我尽量不改变你的类设计中的任何内容,但是你应该考虑哪些成员函数和字段应该是static
而哪些不应该;现在设计看起来不方便。