如何接受可能具有不同维度的 std::array ?这应该在编译时知道,但以下内容不起作用
template<int n>
void read_interval(size_t start, size_t end, std::array<n, char>& dest)
我也知道 end-start == n 所以它也可能以某种方式被模板化。
您有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 == n
asstart
和end
is 运行时值。如果您确实需要这种静态保证,则需要将它们设为模板参数,否则您可以将运行时断言用于调试模式或执行检查并引发异常。
您需要模板 size 参数,就像您所做的那样。除非您交换了模板参数的顺序,std::array
这就是它不起作用的原因。
这样的代码编译,你应该使用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
,您可以将n
insideread_interval
用作普通常量。