如何接受可能具有不同维度的std :: array?这应该在编译时已知的,但下面不会工作从std :: array读取范围
template<int n>
void read_interval(size_t start, size_t end, std::array<n, char>& dest)
我也知道,最终开始==ñ这样有可能以某种方式要么模板。
如何接受可能具有不同维度的std :: array?这应该在编译时已知的,但下面不会工作从std :: array读取范围
template<int n>
void read_interval(size_t start, size_t end, std::array<n, char>& dest)
我也知道,最终开始==ñ这样有可能以某种方式要么模板。
这样的代码编译,你应该使用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);
}
结束时,如果n
总是等于end
你可以使用n
内read_interval
普通不变。
您需要为大小参数进行模板设置,就像您一样。除了你已经交换了std::array
模板参数的顺序,这就是为什么它不起作用。
你有模板参数为std::array
以错误的方式和非类型参数是一个std::size_t
,不是int
:
template<std::size_t n>
void read_interval(size_t start, size_t end, std::array<char,n>& dest)
{
//...
}
你不能静态地保证end - start == n
为start
和end
是运行值。如果您确实需要这种静态保证,则需要将它们作为模板参数,否则可以使用运行时断言进行调试模式或执行检查并抛出异常。