Próbuję przekazać przez odniesienie tablicę nieznanej liczby wymiarów (pozycja). Zasadniczo chciałbym zrobić coś podobnego (który nie kompiluje)Przekaż tablicę nieznanej pozycji przez odniesienie
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);
}
Czy jest jakiś sposób osiągnięcia tego? W szczególności, czy w jakiś sposób można zastosować podejście variadic-template?
Mogę zrobić rodzajowy template<typename T> f(T& arr)
, ale w takim przypadku w jaki sposób mogę odzyskać rozmiary bez jawnego ich przekazywania? (Nawet przy podejściu do szablonu variadic nie jestem pewien, jak odzyskać poszczególne elementy w pakiecie ... bez pewnego rodzaju rekurencyjnego składania).
W szczególności szukam prostego sposobu inicjowania tablicy o nieznanej randze zgodnie z pewną regułą.
Dzięki, ale myślę, że dostaniesz rangę z 'std :: rank :: value', prawda? Problem polega na tym, że 'std :: cout << std :: rank :: value << std :: endl;' wypluwa '0'. –
vsoftco
Tak - masz rację - przepraszam. Musisz użyć "decltype". – AnArrayOfFunctions
i "wartość", a nie "wartość_typu". Ale nawet w tym przypadku wydaje się, że 'std :: rank' uważa, że przekazywany jest rodzaj ogólny typu nieszablonowego. Próbując 'std :: cout << typeid (arr) .name();' podaje poprawny typ, tablicę 3-D, ale z jakiegoś powodu 'std :: rank' nie działa. Spróbuj wyświetlić rangę. – vsoftco