Witam serdecznie,
Zaczynam przygodę z programowaniem i kompletnie nie mogę poradzić sobie z jednym aspektem. Czy możliwe jest stworzenie funkcji, której argumentem będzie mogła być zarówno 2D tablica dynamiczna lub 2D tablica statyczna?
Poczytaj o "Templates in C++"
Nie używaj tablic tylko std::vector
Sęk w tym, że chcę mieć "uniwersalną" funkcję,, która może pobierać jako argument tablicę statyczną albo dynamiczną albo vector.
Przy pobieraniu tablicy dynamicznej do funkcji poniżej dostaje error, działa tylko z tab. statyczną. W jaki sposób skonstruować szablon/funkcję, aby możliwe było przekazanie każdego typu tablicy tj. statycznych i dynamicznych?
template < int Y, int X>
void max(double (&tab)[Y][X])
nie zrobisz uniwersalnej dla tablicy i vectora. musisz wtedy wyspecjalizowac template.
Vector jest obiektem mozesz po nim iterowac
Tablica jest typem wbudowanym, musisz znac wielkosc tablicy
Sam ten fakt juz powinien odwiezc Cie od takiej proby
Ok, Vector odkładam póki co na bok. Jak W takim razie stworzyć taką funkcję dla tablic alokowanych statycznie i dynamicznie (w załączony powyżej szablon działa dla tab. statycznej, z kolei próba przekazania tablicy przez wskaźniki działa tylko dla tab. dynamicznych)?
domizid napisał(a):
Ok, Vector odkładam póki co na bok.
To ty programujesz w C++ czy w C?
domizid napisał(a):
Sęk w tym, że chcę mieć "uniwersalną" funkcję,, która może pobierać jako argument tablicę statyczną albo dynamiczną albo vector.
Przy pobieraniu tablicy dynamicznej do funkcji poniżej dostaje error, działa tylko z tab. statyczną. W jaki sposób skonstruować szablon/funkcję, aby możliwe było przekazanie każdego typu tablicy tj. statycznych i dynamicznych?template < int Y, int X> void max(double (&tab)[Y][X])
To jest bardzo zły pomysł.
Częściowo da się to zrobić: https://wandbox.org/permlink/xYMxfOc7r0v5G6bm
template<class T>
void print(T&& b, T&& e)
{
for (;b != e; ++b)
{
for (auto x : *b)
{
cout << x << ' ';
}
cout << '\n';
}
cout << '\n';
}