【发布时间】:2017-05-29 13:43:23
【问题描述】:
我编写了用于设置顶点属性的辅助函数。如您所见,这 3 个函数基本相同,只是每个函数设置了不同的顶点成员变量。因为它违反了 DRY 原则并且看起来很丑,所以我想将它们结合起来。
void setPositions(const int offset, const sf::Vector2f (&positions)[vertexCount]) {
int index = ensureSizeAndGetIndex(offset);
for(int i = 0; i < vertexCount; i++) {
vertices[index + i].position = positions[i];
}
}
void setTexCoords(const int offset, const sf::Vector2f (&texCoords)[vertexCount]) {
int index = ensureSizeAndGetIndex(offset);
for(int i = 0; i < vertexCount; i++) {
vertices[index + i].texCoords = texCoords[i];
}
}
void setColors(const int offset, const sf::Color (&colors)[vertexCount]) {
int index = ensureSizeAndGetIndex(offset);
for(int i = 0; i < vertexCount; i++) {
vertices[index + i].color = colors[i];
}
}
我考虑的事情:
- 模板不能在这里工作,因为它们不处理成员变量
- 我可以通过传递要使用的变量的布尔标志来组合前两个函数。但这对第三个功能没有帮助。
- 我可以添加指向顶点类的成员变量的指针和一个可供选择的枚举,但这会带来太多(性能)开销
- 也许是 Lambda,也许是元编程?
只是对这里最干净的解决方案感兴趣。
【问题讨论】:
-
为什么你认为模板不能处理成员变量指针?
-
标识符不能用作模板参数。我就是这个意思。
-
你的意思是像this?
-
我不知道这是可能的。现在效果很好。
标签: c++