如何接受可能具有不同維度的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
是運行值。如果您確實需要這種靜態保證,則需要將它們作爲模板參數,否則可以使用運行時斷言進行調試模式或執行檢查並拋出異常。