2015-11-19 39 views
0

如何接受可能具有不同维度的std :: array?这应该在编译时已知的,但下面不会工作从std :: array读取范围

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

我也知道,最终开始==ñ这样有可能以某种方式要么模板。

回答

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); 
} 

结束时,如果n总是等于end你可以使用nread_interval普通不变。

0

您需要为大小参数进行模板设置,就像您一样。除了你已经交换了std::array模板参数的顺序,这就是为什么它不起作用。

1

你有模板参数为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 == nstartend是运行值。如果您确实需要这种静态保证,则需要将它们作为模板参数,否则可以使用运行时断言进行调试模式或执行检查并抛出异常。