【发布时间】:2020-11-26 18:14:20
【问题描述】:
假设我有一个结构
struct Vector3 {
float x;
float y;
float z;
};
请注意,sizeof(Vector3) 必须保持不变。
编辑:我对没有设置器的解决方案感兴趣。
不要让我们创建该结构 Vector3 pos 的实例。我怎样才能实现我的结构,以便我可以拥有类似pos.xy = 10 // updates x and y 或 pos.yz = 20 // updates y and z 或 pos.xz = 30 // updates x and z 的东西?
【问题讨论】:
-
你可以这样做,但它需要大量的样板,你不能使用方法吗?
pos.set_yz(20)?这会回答您的问题还是您专门寻找pos.yz = 20;? -
pos.xy = 10是什么意思?pos.x = pos.y = 10? -
这看起来有点像所谓的 swizzling。您可以在 GLM 库中看到它的实现。
-
Glm 也没有 swizzling。它有一些花哨的函数来近似它,但没有像 glsl 的 swizzles 那样。而且我强烈怀疑如果没有函数、宏或编译器对此特性的支持,C++ 中的 swizzles 是可能的。
-
@churill:见 GLM_CONFIG_SWIZZLE ...github.com/g-truc/glm/blob/master/glm/detail/_swizzle.hppgithub.com/g-truc/glm/blob/master/glm/detail/type_vec4.hpp