Składnia metody szablonowej i typów generycznych

0

Witam!

Mam taką funkcję

template <typename T>
void process06(T[5]) {std::cout  << "T[5]\n";}

Próbuje sprawdzić co znajduję się w zmiennej typu T więc próbuje zmienić definicje funkcji na

template <typename T>
void process06(T[5] arr) {std::cout  << arr[1] << "T[5]\n";}

Ale dostaje błąd kompilatora:

main.cpp:13:21: error: expected ‘,’ or ‘...’ before ‘arr’
   13 | void process06(T[5] arr) { std::cout << "T[5]\n"; }

Gdzie robię błąd ?

3

Używasz C tablic, tablica 5 elementów jest deklarowana jako T arr[5]. Polecam cdecl.org

1

Template powinien być raczej generyczny, a tu na stałe deklarujesz wielkość tablicy, kompilator może sam wydedukować jaką wersję funkcji wygenerować na podstawie wykorzystanej tablicy.

template <typename T, size_t SIZE> 
void print(const T (&array)[SIZE])
{
    for(size_t i = 0; i < SIZE; ++i)
        std::cout << array[i] << " ";
}

int main() {
    int arr[] = { 1,2,3,4,99};
    print(arr);
    return 0;
}
0

No nie, nawet po poprawieniu tu wcale nie jest daklarowana tablica 5-elementowa. Latwo to mozna sprawdzic np. wypisujac sizeof(arr). Spokojnie tez mozna tam przekazac mniej wiecej cokolwiek - np. cos takiego sie skompiluje process06(process06<int>);.

1 użytkowników online, w tym zalogowanych: 0, gości: 1