我在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结构实例。
答案 0 :(得分:2)
如果每个Vertex
可以具有 colors
或texcoords
,但不能两者都具有,则可以使用union
(或者更好的是,{ {1}}很有道理。
如果std::variant<vec3, vec2>
可以同时具有 Vertex
和colors
,则texcoords
将不起作用,因为union
可以一次处于活动状态。
关于性能,配置文件,配置文件,配置文件。以这样的方式构建界面,即呼叫者看不到union
或其他成员的选择。然后以两种方式实施它,并进行测试以查看哪种方法更好(或者根本没有明显的区别)。