2013-04-22 152 views
1

我想创建一个简单的二维数组或向量的SFML的Sprite对象。我尝试了很多不同的方法,最终总是得到错误或者只是一个空的向量。C++ unique_ptr对象的2d数组?

我已经试过

// first x 
for (int c = 0; c < w ; ++c) 
{ 
    vector<unique_ptr<sf::Sprite>> col; 
    map.push_back(std::move(col)); 

    // then y 
    for (int r = 0; r < h ; ++r) { 
     map[c].push_back(unique_ptr<sf::Sprite>(new sf::Sprite())); 
    } 
} 

unique_ptr<sf::Sprite[0][0]> map; 
... 
map.reset(unique_ptr<sf::Sprite[0][0]>(new sf::Sprite[w][h])); 

总体来说,我只是没有成功地制作2D智能指针对象数组,并想知道,如果有人可以帮助。对不起,如果我没有包含足够的细节,这是我的第一篇文章,堆栈溢出,所以请温柔:)

编辑:让我给一些更详细的,对不起。所以我在一个基本上是单身的工厂类的类中创建了这个2d数组。所以我需要这个二维数组在创建后离开堆栈等等。

+0

然后将其作为[静态]成员变量或在名称空间中定义它。 – 2013-04-22 02:25:06

+0

注意:您不应该创建精灵的二维数组。你应该创建一个'width * height'长度的精灵的一维数组,你可以像2D数组那样访问。 – 2013-04-22 04:52:12

回答

0

您声明map作为指向多维数组的指针,并尝试将std::vector<>类型的插入对象加入其中。相反,您可以使用矢量(在这种情况下为矢量),并消除数组的分配并在流程中简化它。

#include <memory> 
#include <vector> 

namespace sf { class Sprite {}; } 

int main() 
{ 
    const int w = 5; 
    const int h = 5; 

    // vector of vectors of Sprites is what you're looking for 
    std::vector<std::vector<std::unique_ptr<sf::Sprite>>> map; 

    // first x 
    for (int c = 0; c < w ; ++c) 
    { 
     // No need to access via index of c. Just append to the column vector itself. 
     std::vector<std::unique_ptr<sf::Sprite>> col; 

     // then y 
     for (int r = 0; r < h ; ++r) 
     { 
      col.push_back(std::unique_ptr<sf::Sprite>(new sf::Sprite())); 
     } 

     // Now add the column vector. 
     map.push_back(std::move(col)); 
    } 

    return 0; 
} 
+0

是制造'std :: unique_ptr'二维数组的最简单方法吗?我提出了相同的观点,但我有强烈的感觉应该有更好的东西存在。没有更惯用的东西? – 2013-07-18 12:24:34