3

std::array接受两个模板参数:

typename T // the element type
size_t N // the size of the array

我想定义一个将 std::array 作为参数的函数,但仅适用于特定的 T,在这种情况下char,但适用于任何大小的数组:

以下是格式错误的:

void f(array<char, size_t N> x) // ???
{
    cout << N;
}

int main()
{
    array<char, 42> A;

    f(A); // should print 42

    array<int, 42> B;

    f(B); // should not compile
}

写这个的正确方法是什么?

4

2 回答 2

6

使用模板函数:

template<size_t N> void f(array<char, N> x) {
}
于 2012-11-25T00:57:45.790 回答
2

N需要是一个静态值。例如,您可以创建一个模板参数:

template <std::size_t N>
void f(std::array<char, N> x) {
    ...
}

在您的示例中,我仍然会通过引用传递参数,但是:

template <std::size_t N>
void f(std::array<char, N> const& x) {
    ...
}
于 2012-11-25T00:59:27.410 回答