Article View: de.comp.lang.c++
Article #2046Re: Operatorenueberladung bei Bitfelder
From: Dietmar Kuehl
Date: Tue, 09 Apr 1996 11:20
Date: Tue, 09 Apr 1996 11:20
53 lines
2165 bytes
2165 bytes
Hi,
Dmitrij Sverdlov (sverdlov@informatik.hu-berlin.de) wrote:
: Ich schreibe gerade eine Klasse für Bitfelder und komme nicht weiter.
: Bisher habe ich folgendes geschafft:
[groesstenteils geloescht]
: char bitfield::operator[] (unsigned bitNr)
: {
: return ( bitarray [bitNr/8] ) & ( 1 << bitNr%8 ) ;
: }
: Mit der Überladung von [] habe ich nun Ausdrücke der Form
: bitfield Bitfield(100);
: ...
: if ( Bitfield[45] ) { ... }
: ...
: ermöglicht, also das Lesen der Bits. Wie kann ich aber die Bits
: schreiben, also z.B. Bitfield[67] = 1; ?
Mach es doch einfach so, wie es bei der Standard-Klasse 'bitset'
gemacht wird: Ueber eine Proxy-Klasse, die eine Referenz auf ein Bit
darstellt ('bitset' ist zugegebenermassen relativ unbekannt; in
Plauger's Buch wird sie als 'bits' dokumentiert):
template <size_t N> class bitset
{
//...
public:
class reference
{
friend class bitset<N>;
//...
public:
reference const &operator= (reference const &newVal);
reference const &operator= (bool newVal);
operator bool() const;
};
reference operator[] (unsigned int bitIdx);
bool operator[] (unsigned int bitIdx) const;
};
Die Implementation der relevanten Funktionen ist relativ einfach: Die
'reference' wird mit einer Referenz auf den entsprechenden 'char' und
der Bitnummer (oder der entsprechenden Maske) konstruiert. Die
Operatoren von 'reference' lassen sich dann einfach implementieren.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl/
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID:
<4kdh6o$1ol@news.BelWue.DE>Path:
arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehlReferences:
<4kbu92$fc5@hahn.informatik.hu-berlin.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl) Newsgroups: de.comp.lang.c++ Subject: Re: Operatorenueberladung bei Bitfelder Date: 9 Apr 1996 11:20:56 GMT Organization: Fakultät für Mathematik und Informatik Message-ID: <4kdh6o$1ol@news.BelWue.DE> References: <4kbu92$fc5@hahn.informatik.hu-berlin.de> Reply-To: dietmar.kuehl@uni-konstanz.de NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de X-Newsreader: TIN [version 1.2 PL2]