dzięki za odpowiedź - w tym rzecz, że zadórno kompilator Borlanda (C++ Builder 6) jak i gcc (Dev-C++)
nie bierze tej specjalizacji pod uwagę i przy wywołaniu
random<bool>();
korzysta ze wzorca i zwraca false
kompilator gcc, Borlanda oraz Intela bez problemów akceptuje wzorce funkcji bezargumentowych
template<typename T>
T random()
{
T r = 0;
return r;
}
problem polega na tym jak je wywoływać:
wywołania:
unsigned char uc = random<unsigned char>();
int i = random<int>();
i one działają
problem się pojawia, gdy chcemy mieć przypadek szczególny dla danego typu
ponieważ nie moga istnieć funkcje o identycznych identyfikatoach oraz prarametrach ale różnej wartości zwracanej taki przypadek szczególny moze być tylko jeden
(jak się okazuje, wzorców nie rozniących sie argumentami może być wiele (!) )
ponadto jeśli jest funkcja:
bool random()
{
return true;
}
to wywołanie tej funkcji musi wyglądać tak: (przynajmniej w gcc dla win i Intel)
bool b = random();
natomaist wywołanie:
bool b = random<bool>();
spowoduje utworzenie funkcji na podstawie wzorca z parametrem bool
rozwiązanie przedstawione powyżej przez johny_bravo nie działa, ponieważ kompilator ignoruje taką specjalizację
stąd wział się mój "problem"
z powyższych stwierdzeń wynika, że nieda się stworzyć takeij specjalizacji funkcji bezparametrowej, żeby
wywołanie
random<bool>();
odnosiło się do niej
czy się myle ?
(spróbuję wykorzystać RTTI, ale to już nie jest specjalizacja)
to, że kompilator to przyjmuje to nie znaczy, że tak jest w standardzie
czy ktoś potrafi powiedzieć jak to się odnosi do najnowszego standardu ?
PS.
dlaczego ten post został przeniesiony ? czyżby moderator nie zrozumiał pytania ? nie zastanowił się nawet ?
dzięki za przeniesienie zpowrotem we właściwe miejsce