[ Nedeljko @ 21.10.2004. 23:48 ] @
Da li C++ standard dopušta da šablonske klase imaju statičke atribute? Linux kompajler je takav kod uspešno preveo, ali mi se čini da sam negde pročitao da to nije po standardu (mada ne vidim razlog), pa bih voleo da budem siguran.
[ Mrav @ 22.10.2004. 02:00 ] @
Na šta konkretno misliš? Nešto ovako:

template <static class T>
class NekiSablon
{
};

Ako je to u pitanju, u VC++ 6.0 to radi, a da li je po standardu ne znam.
[ Dragi Tata @ 25.10.2004. 02:20 ] @
Sa zaprepašćenjem sam konstatovao da ovo prolazi u VC++ 7.1

Code:

template <static class T>
class NekiSablon
{
T t_;
public:
    NekiSablon (T t): t_(t) {}
};

int main ()
    {
    NekiSablon<int> i(1);
    }


GCC prijavljuje grešku (kao što i treba koliko ja znam).

Uglavnom, prilično sam siguran da je Nedeljko hteo da pita da li je dozvoljeno nešto kao:

Code:

template <class T>
class NekiSablon
{
static T t_;
...
};


Dozvoljeno je, zašto ne bi bilo? Samo obrati pažnju da ćeš dobiti posebnu instancu statičke promenljive za svaku specijalizaciju šablona. Tj:

Code:

NekiSablon<int>::t_; // jedna stvar
NekiSablon<double>::t_ // sasvim druga stvar

[ Nedeljko @ 25.10.2004. 11:58 ] @
Da, to sam hteo da pitam, a u međuvremenu sam konsultovao i zvanični dokument C++ standard iz 1998. No, logično je da imam po jednu statičku promenljivu za svaku specijalizaciju šablona, jer su T<int> i T<double> različte klase. Sa druge strane,

T<int> a;
T<int> b;

mi daju samo jednu statičku promenljivu, jer se rtadi o istoj klasi. No, na nešto drugo valja obratiti pažnju. Unutar klase mi samo deklarišemo statički atribut, dok se on definiše (i inicijalizuje) van klase. To je zato da ne bi došlo do duplih identifikatora u objektnim fajlovima različitih modula programa. U zaglavlju će stajati deklaracija klase sa deklaracijom statičkih atributa, a na tačno jednom mestu programu definicija tog statičkog atributa zajedno sa inicijalizacijom (recimo, u izvornom fajlu u kome se definiše sama klasa). To važi i za šablonske i nešablonske klase.
[ Mrav @ 25.10.2004. 15:17 ] @
template <static class T>

Čemu ovo služi?

A uz to i ne radi :)

Znači ako je ovo kao što vidimo i dozvoljeno u nekim implementacijama, meni lično nije jasno značenje ovoga, šta se time dobija? Ili je to ligika Microsofta - samo da ima a nije važno ni kako radi ni da li ičemu služi.
[ Nedeljko @ 25.10.2004. 23:54 ] @
Ne znam. Moje se pitanje odnosilo na
Code:

template <class T>
class NekiSablon
{
static T t_;
...
};
[ rivan @ 26.10.2004. 07:38 ] @
Citat:
Dragi Tata: Sa zaprepašćenjem sam konstatovao da ovo prolazi u VC++ 7.1

Code:

template <static class T>
class NekiSablon
{
T t_;
public:
    NekiSablon (T t): t_(t) {}
};

int main ()
    {
    NekiSablon<int> i(1);
    }


GCC prijavljuje grešku (kao što i treba koliko ja znam).


Ja sam sad nacisto zbunjen (pod pretpostavkom da je gornji primer sintaksno ispravan - da static nesto znaci) - zasto gornji primer ne bi trebao da prodje - koliko vidim g++ prijavljuje gresku na static

Prvi put vidim static u listi argumenata za template - moze li neko da pojasni cemu to sluzi (mozda zato sto nisu stavili export za template - pa rekli ajd da stavimo nesto drugo kao zamenu :-) )

uzgred cini mi se da se static ne uklapa ni u njihovu gramatiku za template u MSDNu, a ipak prolazi
[ Dragi Tata @ 26.10.2004. 13:06 ] @
Pitao sam neke MS-ovce. Očigledno je u pitanju bug. Čak su i otvorili bug report za sledeću verziju kompajlera:

http://lab.msdn.microsoft.com/...back.aspx?feedbackId=FDBK17054

Mrave, smeši ti se lepa karijera u QA :)
[ Mrav @ 26.10.2004. 17:03 ] @
Citat:
Mrave, smeši ti se lepa karijera u QA :)


Ma sad ću da ih razbijem, pronaći ću im ja još nešto ;) . Ima Billy lično da me zove da radim za njih.

P.S. Hmm? izgleda da im se ovaj bug provlači u verziji 6.0 pa nadalje do vs 2005.
Mislite o tome....