Portál AbcLinuxu, 12. května 2025 01:53
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.
No, size_t a ssize_t je typedef. Jinak na mem 64bit linuxu je size_t unsigned long a ssize_t long...
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 ;)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.