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 回答