Datentypen in beliebiger Größe?
-
Hi,
es gab hier mal einen Code womit man Datentypen auf Templatebasis erstellen kann die eine beliebige größe haben können z.B. 60 Byte.
Die Suchfunktion hat jedoch nichts ergeben
Weiß noch einer wo der Thread ist oder code?=
-
template<std::size_t size> class Data { private: unsigned char data_[size]; };
-
Oh man, haha, sehr lustig!
Nein es gab dazu auch einen Lokiport.
-
was passt dir denn daran nicht?
-
looooool schrieb:
was passt dir denn daran nicht?
Denk mal nach
@Erfahrenere wie Hume oder Volkard:
Wisst ihr nicht wo der thread hin ist?
-
Wenns nur Zahlen sein sollen, dann guck dir mal GnuMP an.
-
ich glaube mal niemand weiß was du meinst.
-
Ich glaube er meinte dieses hier:
/* * John Martin: john.p.martin@eudoramail.com * * This file demostrates the typeselect utility template. This file utilizes * code derived from Andrei Alexandrescu's book: Modern C++ Design, Design Patterns * and Generic Programming Applied published by Addison Wesley. His code is free * to use and so is mine. Enjoy. * */ #include <iostream> using namespace std; // used to terminate typelists class null_type {}; // used to recursively create lists of types template <class U, class V> struct typelist { typedef U head_type; typedef V tail_type; }; // helper macros for managing typelists #define TL_1(T1) typelist<T1, null_type> #define TL_2(T1,T2) typelist<T1, TL_1(T2) > #define TL_3(T1,T2,T3) typelist<T1, TL_2(T2,T3) > #define TL_4(T1,T2,T3,T4) typelist<T1, TL_3(T2,T3,T4) > // used to choose between two types at compile time template <bool Expr, class U, class V> struct select_type { typedef U result_type; }; // specialization for false conditions template <class U, class V> struct select_type<false, U, V> { typedef V result_type; }; // choose a type based on a specific size template <unsigned int Size, class TList> struct select_type_size; template <unsigned int Size, class U, class V> struct select_type_size<Size, typelist<U, V> > { typedef typename select_type < Size == sizeof(U), U, typename select_type_size<Size, V>::result_type >::result_type result_type; }; // specialization if a type is not found use null_type to generate a compile time error template <unsigned int Size> struct select_type_size<Size, null_type> { typedef null_type result_type; }; // define a list of types typedef TL_4(signed char, short int, int, long int) signed_ints; typedef TL_4(unsigned char, unsigned short, unsigned int, unsigned long) unsigned_ints; // now when we port to different platforms we have guaranteed fixed size types // or the compiler generates an error if we use an invalid type. typedef select_type_size<1, signed_ints>::result_type int8_t; typedef select_type_size<2, signed_ints>::result_type int16_t; typedef select_type_size<4, signed_ints>::result_type int32_t; typedef select_type_size<1, unsigned_ints>::result_type uint8_t; typedef select_type_size<2, unsigned_ints>::result_type uint16_t; typedef select_type_size<4, unsigned_ints>::result_type uint32_t; // what select_type_size does is iterate through a list of types at compile // time looking for a type of a specific size, when its found it sets int main(int argc, char** argv) { cout << "sizeof(int8_t) == " << sizeof(int8_t) << endl; cout << "sizeof(int16_t) == " << sizeof(int16_t) << endl; cout << "sizeof(int32_t) == " << sizeof(int32_t) << endl; cout << "sizeof(uint8_t) == " << sizeof(uint8_t) << endl; cout << "sizeof(uint16_t) == " << sizeof(uint16_t) << endl; cout << "sizeof(uint32_t) == " << sizeof(uint32_t) << endl; return 0; }
Leider lassen sich diese Speziellen sachen nur auf dem VC++7.1 compilieren und nicht auf dem VC++7.0
Aber ich glaub es gab dazu einen Port! Weiß einer wo es den gibt?
-
das sieht mir nicht nach beliebiger größe aus
was passt dir denn daran nicht?
Denk mal nach
@Erfahrenere wie Hume oder Volkard:
Wisst ihr nicht wo der thread hin ist?jetzt mal nicht patzig werden, die lösung von ihm war genau das, was man deiner frage entnehmen konnte, entweder du stellst deine frage präziser, oder begnügst dich mit dem was geliefert wird.
-
otze schrieb:
jetzt mal nicht patzig werden, die lösung von ihm war genau das, was man deiner frage entnehmen konnte,
stimmt.