2015-11-19 80 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是運行值。如果您確實需要這種靜態保證,則需要將它們作爲模板參數,否則可以使用運行時斷言進行調試模式或執行檢查並拋出異常。