Portál AbcLinuxu, 10. května 2025 01:05
void register(const Hodnota& hodnota, long int n = 0);
void register(const Hodnota& hodnota, long int n = 0, void *ptr = NULL);
void register(const Hodnota& hodnota, void *ptr = NULL);
U prvního případu by si uživatel, pokud by chtěl použít pointery, to musel přetypovat. To by fungovalo jak na 32 tak na 64 bit, ale nepřijde mi to jako zrovna čisté řešení.Řešení dotazu:
union
{
unsigned long n;
void* ptr;
} nieco;
a pouzivat potom toto. Ale moc sa mi to nepaci, skor toto cele smrdi zlym navrhom, ukladat pointery a cisla do jedneho kontajnera?
Skoda, ze si neuviedol, ako vyzera volajuci tej register()Protože to nevím, ten může vypadat buhví jak
U těchto základních typů stačí klasická union
Pro složitější typy je vhodnější Boost Any nebo Boost Variant, resp. (ne úplně intiutivně použitelný) QVariant
Na druhou stranu si nejsem jistý, jestli je to vůbec vhodně navržené rozhraní
std::ptrdiff_t
(signed), resp. std::size_t
(unsigned), oboje z cstddef
void registerInt(const Hodnota& hodnota, size_t n = 0); void registerPtr(const Hodnota& hodnota, void *ptr = NULL);Jinak pozor, long je v 64bitovém Windows 32bitový typ! size_t, ptrdiff_t jsou vhodné typy na přetypování.
qptrdiff
, respektive quintptr
. Nakopla mě k tomu tvoje zmínka o std::ptrdiff_t
, takže díky
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.