3

これはおそらくあなたにとって簡単ですが、私はまだ実際には参照に興味がありません。なぜこれがうまくいかないのかわかりません。正しいスタイルを教えてください。

template <typename T>
void shuffle(T (&array)[], size_t len){};

そして、私はそれを次のように呼ぼうとします:

uint_fast8_t dirBag[4]
Random::shuffle(dirBag, sizeof(dirBag)/sizeof(decltype(dirBag[0])));

エラーは次のとおりです。

Error   1   error C2784: 'void Random::shuffle(T (&)[],size_t)' : could not deduce template argument for 'T (&)[]' from 'uint_fast8_t [4]'
4

1 に答える 1

5

試す:

template <typename T, size_t N>
void shuffle(T (&array)[N])
{
};

さらに、関数の本体内には、配列のサイズがあります: N. サイズをパラメーターとして渡す必要がある場合は、確かにできると思いますが、パラメーターは独立しています。


サイト ノート: 関数の名前から判断すると、これも興味深いものであることがわかります。

uint_fast8_t dirBag[4];

// ...populate your array...

std::random_shuffle(std::begin(dirBag), std::end(dirBag));
于 2013-02-24T02:20:31.983 に答える