如何专用化网格类

How to specialize a mesh class?

本文关键字:网格 专用 何专用      更新时间:2023-10-16

我想知道网格类如何专业化?例如,如果我们有一个由多边形类中的多边形组成的网格类。我们如何根据应用对网格进行专业化以支持标量场、向量场等。也许对于高度复杂的模拟,我们需要 3 个标量场和 4 个向量场。相反,对于简单的仿真,我们只需要一个标量场,仅此而已。

因此,通过专业化,我的意思是向多边形添加属性以存储局部数量。

这是一个悬而未决的问题,我不知道该怎么做。那样可能是不可能的。但是 c++ 是灵活的,每个允许在实践中做一些接近的事情的解决方案都会有所帮助。

您可以使用模板(假设多边形是顶点的集合,网格是多边形的集合(。下面是一个简单的例子:

#include <array>
#include <vector>
template <typename T>
struct Vector {
  T x, y, z;
};
template <typename T, size_t N>
struct Polygon {
  std::array<T, N> vertices;
};
template <typename T>
struct Mesh {
  std::vector<T> polygons;
};
int main() {
  // mesh with polygons of float-vertices with 3 dimensions
  Mesh<Polygon<Vector<float>, 3>> mesh;
  mesh.polygons.push_back(
      {{{{1.f, 2.f, 3.f}, {1.f, 2.f, 3.f}, {1.f, 2.f, 3.f}}}});
}