Portál AbcLinuxu, 12. května 2025 01:53

Dotaz: C++ size_t vs. unsigned int overloading

11.12.2008 14:43 Ivan
C++ size_t vs. unsigned int overloading
Přečteno: 796×
Odpovědět | Admin

Ahoj, resim nasledujici problem. Mam tridu na logovani nejaskych blbosti a potreboval bych vypisovat i cisla a dalsi typu.

proto mam metodu arg, ktera ma pretizeny argument string, float, int a prave taky unfigned int a size_t. Kdyz to prelozim na 64bit linuxu tak je to OK. Ale na 32 bit linuxu dostanu hlasku:

../../src/trotl_base.h:340: error: ‘trotl::OciException& trotl::OciException::arg(size_t)’ cannot be overloaded
../../src/trotl_base.h:338: error: with ‘trotl::OciException& trotl::OciException::arg(unsigned int)’

Pripada mi, jako kdyby size_t nebyl datovy typ, ale jen makro preprocesoru, ktere se nahradi na 32bit linuxu za unsigned int. Kdyz metodu arg(size_t) ostranim, tak je to na 32bit linuxu ok, ale na 64bit mi to zase nadava ze nemuze najit vhodnou konverzi pro typ size_t. Neznate nejake "ciste" reseni, ktere by fungovali na Linuxu, Woknach v 32 i 64 bitech? Vim ze bych to moh prospikovat #ifdef-ama ale to si nechavam jako nejkrajnejsi reseni.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.12.2008 15:17 Milan
Rozbalit Rozbalit vše Re: C++ size_t vs. unsigned int overloading
Odpovědět | | Sbalit | Link | Blokovat | Admin

No, size_t a ssize_t je typedef. Jinak na mem 64bit linuxu je size_t unsigned long a ssize_t long...

Luboš Doležel (Doli) avatar 11.12.2008 15:48 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C++ size_t vs. unsigned int overloading
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dal bych tam unsigned int a unsigned long.
11.12.2008 15:49 volca
Rozbalit Rozbalit vše Re: C++ size_t vs. unsigned int overloading
Odpovědět | | Sbalit | Link | Blokovat | Admin

Navrhuju po vzoru Cimrmana udelat krok stranou, a udelat misto pretizenych metod metodu prez sablonu, vnitrne pak pouzit stringstream.

neco jako:

template<typename T> void logValue(const std::string& msg, T param);

Kod uvnitr necham za domaci ukol ;)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.