0

我希望能够从 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

//元素.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
4

2 回答 2

1

我缺乏对您的帖子发表评论的声誉,所以我必须在这里发帖。

为什么不让每个 Element 实例都有自己的指向其父对象的指针?每个指针都可以指向同一个 Mesh 对象。节省内存真的那么重要吗?

即使你最终得到了一个单一的网格,如果将来你确实想扩展到多个网格,每个网格都有一组元素,那么更改将更容易完成。

如果您确实需要一个指向父网格的静态指针,您可以将元素的构造封装在 Mesh 的方法中,并在 Mesh 的构造函数中将父指针设置为this

于 2013-03-06T22:38:46.877 回答
0

您必须定义静态指针(在任何源文件中;不在 中*.h):

Mesh* Element::m_Parent; // initialized to NULL by the system

此外,要初始化它,请使用以下语法:

Element::m_Parent = whatever;

我尽量不改变你的类设计中的任何东西,但你应该考虑哪些成员函数和字段应该是static,哪些不应该;现在的设计看起来不太方便。

于 2013-03-06T22:46:27.310 回答