[c++]jak zrobić przypadek szczególny wzroca funkcji bezpar

0

jak zrobić przypadek szczególny wzroca funkcji bbezparametrowej ??

mam przykłądową funkcje:

  template<typename T> T random()
    {
      T r = 0;
      return r;    
    }    

uzycie:

 unsigned long ul = random<unsigned long>();

potrzebuje dla przykładu, żeby

random<bool>();

zwracało true

to nie działa:

   bool random()
    {  
      return true;
    } 

nie działa - trzeba to zrobić inaczej

proszę o pomoc.?

0

Dla szablonu:

 
template<typename T> T random()
    {
      T r = 0;
      return r;   
    } 

potrzebujesz specjalizacji:

  template<bool> bool random()
    {
      return true;   
    } 

pozdrawiam
johny

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1