Witam. Chciałbym użyć specjalizacji szablonów funkcji (zadanie tego wymaga) do pobrania 5 elementów tablicy char(5 wyrazów) - to pierwszy argument, a drugi to liczba elementów tej tablicy. Funkcja ma zwrócić adres najdłuższego wyrazu.
Tablica wygląda tak:
const char* tabc[5] = {"Hej", "Czescelo", "Brawo", "Siemankos", "test"};
Zrobiłem taki szablon funkcji ze specjalizacją:
template <> const char* maxn(const char** arr, int n)
{
const char* temp = arr[0];
int i = 0; while (i < n)
{
if (strlen(arr[i]) > strlen(temp))
{
temp = arr[i];
}
i++;
}
return temp;
}
Funkcja zwraca najdłuższy wyraz, ale tylko wartość. Chciałbym zwrócić ADRES tej wartości. Niestety co próbuje pozmieniać typy w szablonie funkcji, to wyskakują błędy.
O to cały kod:
#include <iostream>
#include <cstring>
using namespace std;
template <class T>
T maxn(T arr [], T n);
template <class T1, class T2>
T1 maxn(T1 arr [], T2 n);
template <> const char* maxn(const char** arr, int n);
int main()
{
int tab[5] = {5, 8, 2, 4 , 6};
double tabd[4] = {2.05, 3.87, 3.44, 1.99};
const char* tabc[5] = {"Hej", "Czescelo", "Brawo", "Siemankos", "test"};
cout << "Najwiekszy element tablicy int: "<< maxn(tab, 5) << endl;
cout << "Najwiekszy element tablicy double: "<< maxn(tabd, 4) << endl;
cout << maxn(tabc, 5);
return 0;
}
template <class T>
T maxn(T arr [], T n)
{
T temp = arr[0];
for (int i = 0; i < 5; i++)
{
if(arr[i]>temp)
{
temp=arr[i];
}
}
return temp;
}
template <class T1, class T2>
T1 maxn(T1 arr [], T2 n)
{
T1 temp = arr[0];
for (int i = 0; i < n; i++)
{
if(arr[i]>temp)
{
temp=arr[i];
}
}
return temp;
}
template <> const char* maxn(const char** arr, int n)
{
const char* temp = arr[0];
int i = 0;
while (i < n)
{
if (strlen(arr[i]) > strlen(temp))
{
temp = arr[i];
}
i++;
}
return temp;
}
Od razu mówię, że zadanie wymaga typów char i specjalizacji.