2017-02-12 63 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'? –