6
我試圖通過引用傳遞未知數量的維度(等級)的數組。基本上,我想要做這樣的事情(不編譯)通過引用傳遞未知等級的數組
template <typename T, int... dims>
void f(T (&arr)[dims]...) // not working
{
// would like to modify the elements of `arr` here, according to some rule
}
int main()
{
int arr[2][3][4]; // rank 3
f(arr);
}
有沒有辦法實現這個?特別是,它是否有可能使用可變參數模板方法?
我可以做的通用template<typename T> f(T& arr)
,但在這種情況下,我怎麼能夠恢復大小而不顯式傳遞它們? (即使使用可變模板方法,我也不確定如何恢復包中的單個元素......而沒有某種遞歸摺疊)。
特別是,我正在尋找一種根據某些規則初始化未知等級數組的簡單方法。
謝謝,但我認爲你得到了'std :: rank :: value'的排名,不是嗎?問題是'std :: cout << std :: rank :: value << std :: endl;'吐出'0'。 –
vsoftco
2015-04-02 18:02:47
是的 - 你說得對 - 對不起。必須使用'decltype'。 – AnArrayOfFunctions 2015-04-02 18:05:31
和'value',而不是'value_type'。但即使在這種情況下,似乎'std :: rank'認爲通用類型的非數組類型正在傳遞。嘗試'std :: cout << typeid(arr).name();'給出正確的類型,3-D數組,但由於某種原因'std :: rank'不起作用。嘗試顯示排名。 – vsoftco 2015-04-02 18:07:11