使用联合与多个结构

时间:2019-06-12 05:08:20

标签: c++

我在C ++中是一个相当陌生的人,有时我不确定什么是更好的性能/内存。我的问题是我需要结构带有恰好两个指向vec3(3个浮点数)和vec3 / vec2的指针。

现在我正在尝试确定是否使用: -具有两个构造函数的联合,一个用于vec3,一个用于vec2 -创建两个结构,一个将包含vec2,一个将包含vec3

struct vec3
{
    float x,y,z;
};
struct vec2
{
    float x,y;
};
struct Vertex
{
    template <typename F>
    Vertex(vec3 *Vertices,F Frag)
    : m_vertices(Vertices),m_fragment(Frag)
    {}

    union Fragment
    {
        Fragment(vec3 *Colors)
        :colors(Colors)
        {}
        Fragment(vec2 *Texcoords)
        :texcoords(Texcoords)
        {}

        vec3 *colors;
        vec2 *texcoords;

    } m_fragment;


    vec3 * m_vertices;
}

此代码运行良好,但是我非常担心性能,因为我打算经常使用Vertex结构,所以我的程序可能有成千上万个Vertex结构实例。

1 个答案:

答案 0 :(得分:2)

如果每个Vertex可以具有 colorstexcoords,但不能两者都具有,则可以使用union(或者更好的是,{ {1}}很有道理。

如果std::variant<vec3, vec2>可以同时具有 Vertexcolors,则texcoords将不起作用,因为union可以一次处于活动状态。

关于性能,配置文件,配置文件,配置文件。以这样的方式构建界面,即呼叫者看不到union或其他成员的选择。然后以两种方式实施它,并进行测试以查看哪种方法更好(或者根本没有明显的区别)。