1

SFML の Sprite オブジェクトの単純な 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]));

全体として、私は 2 次元のスマート ポインター オブジェクト配列の作成に成功していないだけで、誰かが助けてくれるかどうか疑問に思っていました。十分な詳細が含まれていない場合は申し訳ありませんが、これはスタックオーバーフローの最初の投稿なので、優しくしてください:)

編集:これについてもう少し詳しく説明させてください。申し訳ありません。したがって、基本的にシングルトンであるファクトリ型クラスでこの 2 次元配列を作成しています。したがって、この2次元配列が作成されてスタックを離れた後も永続化する必要があります。

4

1 に答える 1

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;
}
于 2013-04-22T02:04:35.327 に答える