eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingENUM i sizeofRe: ENUM i sizeof
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Mateusz Loskot <s...@s...net>
    Newsgroups: pl.comp.programming
    Subject: Re: ENUM i sizeof
    Date: Sun, 24 May 2009 01:24:53 +0100
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 52
    Message-ID: <gva44m$9jc$1@inews.gazeta.pl>
    References: <9hqq56nxr4vg.1v5dxjg9j3d83$.dlg@40tude.net>
    NNTP-Posting-Host: 94-193-98-140.zone7.bethere.co.uk
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1243124694 9836 94.193.98.140 (24 May 2009 00:24:54 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 24 May 2009 00:24:54 +0000 (UTC)
    X-User: mloskot
    In-Reply-To: <9hqq56nxr4vg.1v5dxjg9j3d83$.dlg@40tude.net>
    User-Agent: Thunderbird 2.0.0.21 (X11/20090409)
    Xref: news-archive.icm.edu.pl pl.comp.programming:182140
    [ ukryj nagłówki ]

    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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: