0

如何接受可能具有不同维度的 std::array ?这应该在编译时知道,但以下内容不起作用

template<int n>
void read_interval(size_t start, size_t end, std::array<n, char>& dest)

我也知道 end-start == n 所以它也可能以某种方式被模板化。

4

3 回答 3

1

您有std::array错误的模板参数,并且非类型参数是 a std::size_t,而不是 a int

template<std::size_t n>
void read_interval(size_t start, size_t end, std::array<char,n>& dest)
{
    //...
}

您不能静态地确保end - start == nasstartendis 运行时值。如果您确实需要这种静态保证,则需要将它们设为模板参数,否则您可以将运行时断言用于调试模式或执行检查并引发异常。

于 2015-11-19T08:52:39.550 回答
0

您需要模板 size 参数,就像您所做的那样。除非您交换了模板参数的顺序,std::array这就是它不起作用的原因。

于 2015-11-19T08:47:41.777 回答
0

这样的代码编译,你应该使用size_t而不是int作为模板参数

#include <array>

template<size_t n>
void read_interval(size_t start, size_t end, std::array<char, n>& dest)
{
}

int main()
{
    std::array<char, 10> arr1;

    read_interval(0, 10, arr1);

    std::array<char, 8> arr2;

    read_interval(0, 8, arr2);
}

end ifn总是相等的end,您可以将ninsideread_interval用作普通常量。

于 2015-11-19T08:50:42.323 回答