-
1. Data: 2009-05-23 23:09:45
Temat: ENUM i sizeof
Od: Freddie28 <f...@p...onet.pl>
Witam.
Mam pytanie związanie z definiowaniem enum-ów w C++. Domyślnym rozmiarem
(sizeof) elementu enum-a jest int. Chcę zmienić ten rozmiar na 1 bajt. W MS
VC++ zapisuje się to jako:
enum ABC : BYTE
{
VAL_1 = 0,
VAL_2 = 1
};
Czy są jakieś inne możliwości zdefiniowania rozmiaru (sizeof) elementu
enum-a? Chodzi mi o inną formę zapisu (zdefiniowania enum-a).
-
2. Data: 2009-05-24 00:24:53
Temat: Re: ENUM i sizeof
Od: Mateusz Loskot <s...@s...net>
Freddie28 wrote:
> Witam.
>
> Mam pytanie związanie z definiowaniem enum-ów w C++. Domyślnym rozmiarem
> (sizeof) elementu enum-a jest int. Chcę zmienić ten rozmiar na 1 bajt. W MS
> VC++ zapisuje się to jako:
>
> enum ABC : BYTE
> {
> VAL_1 = 0,
> VAL_2 = 1
> };
>
> Czy są jakieś inne możliwości zdefiniowania rozmiaru (sizeof) elementu
> enum-a? Chodzi mi o inną formę zapisu (zdefiniowania enum-a).
Możesz rozwiązać to prostym szablonem, przenośnie:
#include <cassert>
#include <iostream>
using namespace std;
enum Color { red = 2, green = 4, blue = 8 };
template <class Enum, class Target>
struct Enumeration
{
Enumeration() : e_(Enum()) {}
Enumeration(Enum e) : e_(static_cast<Target>(e)) {}
operator Enum() const { return static_cast<Enum>(e_); }
private:
Target e_;
};
void print(Color color)
{
cout << "color = " << color << endl;
}
int main()
{
Enumeration<Color, char> color(red);
assert(sizeof(color) == sizeof(char));
print(color);
return 0;
}
Pozdrawiam
--
Mateusz Loskot, http://mateusz.loskot.net
Charter Member of OSGeo, http://osgeo.org