如何接受可能具有不同维度的std :: array?这应该在编译时知道,但以下内容不起作用
template<int n>
void read_interval(size_t start, size_t end, std::array<n, char>& dest)
我也知道end-start == n所以也可能以某种方式模板化。
答案 0 :(得分: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 == n
为start
和end
为运行时值。如果您确实需要静态保证,则需要将它们作为模板参数,否则可以使用运行时断言进行调试模式或执行检查并抛出异常。
答案 1 :(得分:0)
您需要模拟size参数,就像您一样。除非您已经交换了std::array
的模板参数的顺序,这就是为什么它不起作用。
答案 2 :(得分: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
,那么您可以在n
内使用read_interval
作为普通常量。