Anonymní profil Robo – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Robo – Programujte.comAnonymní profil Robo – Programujte.com

 

Příspěvky odeslané z IP adresy 188.112.111.–

Robo
C / C++ › Explicitná špecializácia
13. 7. 2013   #179113

#2 vitamin
Tak ale ja musím postupovať podľa zadania a vytvoriť špecializáciu.
Robím to podľa knihy (Mistrovství v C++) a tam je napísané že to ide. Konkrétne: "Pre dané meno funkcie môžeme mať nešablónovú funkciu, šablónovú funkciu a explicitnú špecializáciu ŠABLÓNOVEJ funkcie".
Je tam aj tento príklad

struct job{
	char name[40];
	double salary;
	int floor;
}

void swap(job &, job &); //prototyp nesablonovej funkcie

template <typename T>
void swap(any &, any &); //prototyp sablony

template <> void swap <job>(job &, job &); //explicitna specializacia

No a ja mám ten problém, že mne nechce uznať tento prototyp

template <> char *maxn<char, int>(const char *arr[], int n);

Keď to porovnávam s prototypom z knihy, tak to mám tak isto, len mám iné typy

Robo
C / C++ › Explicitná špecializácia
13. 7. 2013   #179103

Mám za úlohu napísať šablónu funkcie maxn(), ktorá príma ako argumenty pole položiek typu T a celé číslo reprezentujúce počet prvkov pola a ktorá vracia jeho najväčší prvok. Ďalej mám vytvoriť špecializáciu, ktorá preberá pole ukazovateľov na char ako jeden argument a počet ukazovateľ ako druhý argument a ktorá vracia adresu najdlhšieho reťazca.

A práve s tým prototypom explicitnej špecializácie mám problém, nechce mi ho uznať.

#include <iostream>

using namespace std;

template <typename T>
T maxn(const T arr[], int n);

template <> char *maxn<char, int>(const char *arr[], int n); // nechce uznat *maxn

int main()
{
	int arr1[] = {9, 0, 69, 44, 55, 3};
	double arr2[] = {0.5, 5.9, 8.45, 69.69};

	cout << "najvacsi prvok je: " << maxn(arr1, 6) << endl;
	cout << "najvacsi prvok je: " << maxn(arr2, 4) << endl;


	system("PAUSE");
}

template <typename T>
T maxn(const T arr[], int n){
	T max = 0;

	for(int i = 0; i < n; i++){
		if(arr[i] > max)
			max = arr[i];
	}

	return max;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý