有沒有辦法在數組大小中多態地使用新的std::array
類型?也就是說,如果我有形式數組的大小是否協變?
void DoSomething(std::array<int, 5>& myArray) {
/* ... */
}
然後就是它的功能數學明確執行以下操作(即使它不是合法的C++代碼嗎?)
std::array<int, 10> arr;
DoSomething(arr);
Imof這在數學上是明確定義的,有沒有辦法編寫std::array
,使它的數組元素是連續的,並且這段代碼編譯?我能想到的唯一技術將是有一些奇怪的模板元程序,其中std::array<T, N+1>
從std::array<T, N>
繼承,但我不相信迫使數組元素是連續的。
爲什麼不只是模板化的如果你想要編譯時多態性,可以在'N'上運行,或者如果你想要運行時多態性就使用'std :: vector'? –
@Karl Knechtel-假設我想要一個函數,它總是包含「至少五個元素」或「至少十個元素」的數組。我可以使用模板來做到這一點,但是這會導致代碼重複,並且需要'static_assert'-esque代碼,這不夠優雅。我不能用'std :: vector'靜態檢查這個。因此,讓函數獲得一定大小的數組的想法就像是C99靜態大小的數組參數,可以在編譯時進行檢查。 – templatetypedef
我不確定你的例子。具體而言,我不確定我是否明白「數學上明確定義」的含義。在'DoSomething'中,如果你查詢'std :: distance(myArray.begin(),myArray.end())',你期望結果是什麼? '5'還是'10'? –