2017-02-12 66 views
-1

我为网格生成随机位置并在将生成的位置设置为最终位置之前检查它们是否与另一个网格不太接近。代码在不用于函数调用时有效,但通过函数调用完成时,只生成一组位置。函数只设置一次值?

任何人都可以解释为什么会发生这种情况?

+0

您可以通过reference'使用'通过value'通话,使用'电话来代替。否则,你复制你的参数,而不是像你想要的那样传递参考。 – Nidhoegger

回答

4

您正在将std::vector实例复制到generateTargets函数中,因此您将看不到来自调用方的原始矢量的任何更改。

最简单的办法是参考,而不是传递他们

void generateTargets(
    std::vector<glm::vec3>& positions, 
    std::vector<glm::quat>& orientations, 
    int targetNum) { // ... 

否则,你可以返回向量保持功能纯度的std::tuple。由于移动语义和RVO,这很可能不会产生任何额外成本。

auto generateTargets(
    std::vector<glm::vec3> positions, std::vector<glm::quat> orientations, int targetNum) 
{ 
    // ... 
    return std::make_tuple(std::move(positions), std::move(orientations)); 
} 

用法:

std::vector<glm::vec3> positions(targetNum); 
std::vector<glm::quat> orientations(targetNum); 
auto result = generateTargets(std::move(positions), std::move(orientations), targetNum); 
+0

不能相信我错过了!感谢您的简单解决方案:) –

+0

有点不相关,但是有没有简单的方式说“如果x = x +'什么东西直到并包括y'”,而不是检查它等于x + 1,x + 2和等等? –

+0

呃...'x <= x + y'? –