Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?

[es] :: C/C++ programiranje :: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?

[ Pregleda: 3589 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.nat-pool.bgd.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?16.09.2004. u 17:55 - pre 238 meseci
Evo primera:
Code:

#include <iostream>
#include <iomanip>

using namespace std;

template < typename _Ta, typename _Tb >
 class MojaKlasa
  {
   public:
    MojaKlasa(){}

   void f( void )  
    {
     cout << "Opsta" << endl;
    }

  };

template < >
 void MojaKlasa<int,int>::f( void ) // potpuno specijalizovana. OK.
  {
   cout << "int,int" << endl; 
  }


// ovo hocu ali nece. 
template < typename _Ta>
 void MojaKlasa<_Ta,int>::f( void )
  {
   cout << "_Ta,int" << endl;
  }


int main()
 {
  MojaKlasa<float,float> ff;   ff.f(); // opsta ide.    
  MojaKlasa<int,int> ii;   ii.f();     // totalna ide.
  MojaKlasa<void,int> vi;  vi.f(); // treba da ispise: "_Ta,int", ali kompajler odbija da prevede.
  cin.get();

  return 0;
 }

X
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?16.09.2004. u 18:00 - pre 238 meseci
Možda ti pomaže saznanje da GCC ne podržava delimičnu specijalizaciju?

f
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?16.09.2004. u 20:06 - pre 238 meseci
Delimična specijalizacija šablon funkcija (kako članica tako i ne-članica) nije predviđena standardom, mada je predložena za iduće izdanje standarda.

Inače, verujem da je Filip mislio da gcc ne podržava delimičnu specijalizaciju funkcija. gcc 3.3 na SFU 3.5 sasvim lepo prevede sledeći kod:

Code:

template<typename T1, typename T2>
class moja{};

template<typename T>
class moja<T,int> {};

int main()
{}

 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.nat-pool.bgd.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?17.09.2004. u 18:03 - pre 238 meseci
Citat:

Možda ti pomaže saznanje da GCC ne podržava delimičnu specijalizaciju

Zaboravih da kazem. Koristio sam i VC7 i GCC 3.3.1.
Jedan i drugi se bune.

Citat:

Delimična specijalizacija šablon funkcija (kako članica tako i ne-članica) nije predviđena standardom, mada je predložena za iduće izdanje standarda.

Steta. Nije mi jasno zasto to nisu ubacili.

Od Slobodnih funkcije je lako napraviti delimicnu specijalizaciju.
Mesto da uradim funkciju napravim funktor. Sto sam na mnogo mesta i radio.
... ali mnogo je lepse delimicno specijalizovati.

I na kraju evo 'resenja' (provereno na GCC-u):
Pre delimicne specijalizacije treba ubaciti:

Code:

template < typename _Ta >
 class MojaKlasa< _Ta,int >
  {
      public:
          MojaKlasa(){}
          void f( void ) ;
      
  };

I to prema 14.5.4.3 Members of class template specializations.

Bas ruzno. copy/paste mora da radi.

X
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


+2 Profil

icon Re: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?01.10.2004. u 14:34 - pre 238 meseci
IT industrija je cudo - ubi terminima - da li je "delimicna specijalizacija" isto sto i "partial revelation" ? :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?01.10.2004. u 14:43 - pre 238 meseci
Citat:
IT industrija je cudo - ubi terminima - da li je "delimicna specijalizacija" isto sto i "partial revelation" ? :)
Mislim da nije. Evo primer za delimičnu specijalizaciju.

Zamisli da imaš šablon koji zavisi od dva tipa, recimo A i B. Ako staviš: A:=int, B:=char, dobio si potpunu specijalizaciju, jer kompajler može da zameni A sa int, B sa char i da ti proizvede tip koji si tražio.

Kod delimične specijalizacije staviš samo A:=int i tražiš od kompajlera da ti proizvede šablon koji sad zavisi samo od jednog parametra.

Partial revealation ti je mogućnost da ceo interfejs podeliš na nekoliko manjih i onda te manje interfejse daješ samo klijentima (klasama) koji će stvarno da ih koriste.

f
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?01.10.2004. u 15:13 - pre 238 meseci
Delimična specijalizacija se posebno koristi kod meta-programiranja. Toplo preporučujem knjigu: http://www.moderncppdesign.com/

Recimo za liste tipova:

Code:

template <class T, class U>
struct TypeList {
typedef T Head;
typedef U Tail;
};


Evo kako bi se računala dužina liste rekurzijom (obratite pažnju da se sve to dešava prilikom kompajliranja, a ne izvršavanja):

Code:

class NullType {};
template <class TList> struct Length;

//potpuna specijalizacija:
template <> struct Length <NullType> {   
enum { value = 0 };
};

//delimicna specijalizacija:
template <class T, class U>
struct Length<TypeList<T, U> > {
enum {value = 1 + Length<U>::value};
};

 
Odgovor na temu

[es] :: C/C++ programiranje :: Delimicna specijalizacija funkcije clanice. Kako ide sintaksa?

[ Pregleda: 3589 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.