C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Erweiterter operator[]

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Tibor Pausz
Guest





PostPosted: Mon Sep 27, 2004 7:24 pm    Post subject: Erweiterter operator[] Reply with quote



Ist für die neuen C++ Norm eine Erweiterung des Operators[] geplant?

Es wäre sehr praktisch, wenn dieser nicht nur auf ein Argument
beschränkt bliebe. Damit könnte man u.a. bessere Matrixklassen
schreiben.

Z.B.

template <typename T>
class demo {
public:
demo (size_t x, size_t y);
T& operator[] (size_t,size_t);
};

Und benutzt würde das ganze in der Form

demo<int> m(100,200);

m[5,6] = 50;

Und wenn das nicht der Fall ist, bestehen reale Chancen das noch für die
nächste C++ Norm vorzutragen?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Tommi Mäkitalo
Guest





PostPosted: Tue Sep 28, 2004 7:02 am    Post subject: Re: Erweiterter operator[] Reply with quote



Tibor Pausz wrote:

....
Quote:

m[5,6] = 50;


Ist das denn so viel besser als
m[5][6] = 50;

"T& operator[] (size_t)" liefert ein Objekt, welches den operator[] (size_t)
in geeigneter Weise überschreibt.

Tommi
--

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Sep 28, 2004 9:48 am    Post subject: Re: Erweiterter operator[] Reply with quote



[email]pausz (AT) stud (DOT) uni-frankfurt.de[/email] (Tibor Pausz) wrote in message
news:<1gksevv.1kjg911ulwcobN%pausz (AT) stud (DOT) uni-frankfurt.de>...

Quote:
Ist für die neuen C++ Norm eine Erweiterung des Operators[] geplant?

Nein.

Quote:
Es wäre sehr praktisch, wenn dieser nicht nur auf ein Argument
beschränkt bliebe. Damit könnte man u.a. bessere Matrixklassen
schreiben.

Z.B.

template <typename T
class demo {
public:
demo (size_t x, size_t y);
T& operator[] (size_t,size_t);
};

Und benutzt würde das ganze in der Form

demo
m[5,6] = 50;

Das Problem besteht darin, dass »m[5,6] = 50« schon legal ist, und hat
eine definierte Semantik, dass man normalerweise nicht ändern darf.

Quote:
Und wenn das nicht der Fall ist, bestehen reale Chancen das noch für
die nächste C++ Norm vorzutragen?

Sicher nicht. Besonders weil es schon die Möglichkeiten gibt, entweder
»m[5][6] = 50« oder »m(5,6) = 50« zu benutzen.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Torsten Robitzki
Guest





PostPosted: Tue Sep 28, 2004 6:27 pm    Post subject: Re: Erweiterter operator[] Reply with quote

Tibor Pausz wrote:

Quote:
Ist für die neuen C++ Norm eine Erweiterung des Operators[] geplant?

Es wäre sehr praktisch, wenn dieser nicht nur auf ein Argument
beschränkt bliebe. Damit könnte man u.a. bessere Matrixklassen
schreiben.

Z.B.

template <typename T
class demo {
public:
demo (size_t x, size_t y);
T& operator[] (size_t,size_t);
};

Und benutzt würde das ganze in der Form

demo
m[5,6] = 50;

Und wenn das nicht der Fall ist, bestehen reale Chancen das noch für die
nächste C++ Norm vorzutragen?

Hm, warum nicht m[5][6] = 50; ? Das wäre meiner Meinung nach viel
C++ischer Smile André Pönitz hatte aber glaube ich mal einen 'Vorschlag'
mit einer Parameterklasse und einem operator,().

mfg Torsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Michael Trocken
Guest





PostPosted: Wed Sep 29, 2004 6:34 pm    Post subject: Re: Erweiterter operator[] Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote in message news:<d6652001.0409280148.5791f431 (AT) posting (DOT) google.com>...
Quote:
pausz (AT) stud (DOT) uni-frankfurt.de (Tibor Pausz) wrote in message
news:<1gksevv.1kjg911ulwcobN%pausz (AT) stud (DOT) uni-frankfurt.de>...

Ist für die neuen C++ Norm eine Erweiterung des Operators[] geplant?
Es wäre sehr praktisch, wenn dieser nicht nur auf ein Argument
beschränkt bliebe. Damit könnte man u.a. bessere Matrixklassen
schreiben.
Z.B.
template <typename T
class demo {
public:
demo (size_t x, size_t y);
T& operator[] (size_t,size_t);
};

Und benutzt würde das ganze in der Form

demo
m[5,6] = 50;

Das Problem besteht darin, dass »m[5,6] = 50« schon legal ist, und hat
eine definierte Semantik, dass man normalerweise nicht ändern darf.

Aber man könnte es so definieren, dass die Semantik für »m[5,6]« bei
Klassen, die mit der bisherigen Syntax geschrieben sind, gleich
bleibt, und dass sich nur für Klassen mit der Sprach-Erweiterung eine
andere Bedeutung für »m[5,6]« ergibt. Das hätte zwar vermutlich eine
gewisse Verwechslungsgefahr zur Folge, aber grundsätzlich möglich wäre
es schon, eine neue Syntax auf dieser Basis zu definieren, ohne die
Bedeutung bestehender Programme zu verändern.

Die Frage ist auch, ob bisherige Konstrukte wie »m[5,6]« nicht eher in
die Kategorie "bislang unentdeckte Fehler" gehören. Eine Warnung, bei
nach bestehender Syntax definiertem operator[] in solchen Fällen
könnte da aufschlussreich sein. Und wer wirklich den Komma-Operator
gemeint hat, der könnte immer noch »m[(5,6)]« schreiben, um die
Warnung zu unterdrücken.


Michael

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tibor Pausz
Guest





PostPosted: Fri Oct 01, 2004 8:56 am    Post subject: Re: Erweiterter operator[] Reply with quote

<kanze (AT) gabi-soft (DOT) fr> wrote:

Quote:
Das Problem besteht darin, dass »m[5,6] = 50« schon legal ist, und hat
eine definierte Semantik, dass man normalerweise nicht ändern darf.

Was habe ich übersehen?

Quote:
Sicher nicht. Besonders weil es schon die Möglichkeiten gibt, entweder
»m[5][6] = 50« oder »m(5,6) = 50« zu benutzen.

Das erstere geht nicht, da man den Operator[] nicht so überladen kann
ohne nicht eine Hilfklasse zu benutzen. Das zweite widerspricht der
Philosophie vom Operator [].

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tibor Pausz
Guest





PostPosted: Fri Oct 01, 2004 8:56 am    Post subject: Re: Erweiterter operator[] Reply with quote

Torsten Robitzki <MyFirstname (AT) Robitzki (DOT) de> wrote:

Quote:
Hm, warum nicht m[5][6] = 50; ? Das wäre meiner Meinung nach viel
C++ischer Smile

Weil man dann eine Hilfklasse braucht (die Syntax gibt es schon) und es
wäre mehr C-like.

Quote:
André Pönitz hatte aber glaube ich mal einen 'Vorschlag'
mit einer Parameterklasse und einem operator,().

Werde mal danach suchen.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tibor Pausz
Guest





PostPosted: Fri Oct 01, 2004 8:57 am    Post subject: Re: Erweiterter operator[] Reply with quote

Tommi Mäkitalo <t.maekitalo (AT) epgmbh (DOT) nowhere.de> wrote:

Quote:
Ist das denn so viel besser als
m[5][6] = 50;

Ja, wäre es. Denn m[5][6] bedeutet,
row demo::operator[] (size_t)
liefert etw ein row Objekt zurück, das mit
T row::operator[] (size_t)
nochmals dereferenziert werden muß.

So ein Verhalten kann man jetzt schon bekommen durch
std::vector<std::vector m;
// init Code

dies erlaubt die Objekte mittels
m[0][1] = 50;
zu adressieren.

Aber man kann so nicht in _einem_ Matrixobjekt den kompletten
Speicherbedarf ermitteln und mit einem einzigem new[] den Speicher
anfordern. Der Overhead wird größer und auf einem Multitasking System
ist jedes malloc/new langsam. Jetzt denk einmal an eine 7 dimensionale
Matrix.

m[0][0][0][0][0][0][0] = 1;

Allokier mal für so ein Konstrukt den Speicher! Mit einem Operator so
wie von mir vorgeschlagen mußt Du bloß einmal den gesamten Block
allokieren.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Karl Heinz Buchegger
Guest





PostPosted: Fri Oct 01, 2004 9:36 am    Post subject: Re: Erweiterter operator[] Reply with quote

Tibor Pausz wrote:
Quote:

[email]kanze (AT) gabi-soft (DOT) fr[/email]> wrote:

Das Problem besteht darin, dass »m[5,6] = 50« schon legal ist, und hat
eine definierte Semantik, dass man normalerweise nicht ändern darf.

Was habe ich übersehen?

m[5,6]
ist identisch zu m[6]
Stichwort: Komma-Operator

Quote:

Sicher nicht. Besonders weil es schon die Möglichkeiten gibt, entweder
»m[5][6] = 50« oder »m(5,6) = 50« zu benutzen.

Das erstere geht nicht, da man den Operator[] nicht so überladen kann
ohne nicht eine Hilfklasse zu benutzen.

Also gehts doch Smile
Zugegeben, man muss ein bischen Aufwand treiben. Der Benutzer der Klasse
merkt aber nichts davon.

--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Marcel Müller
Guest





PostPosted: Fri Oct 01, 2004 10:21 am    Post subject: Re: Erweiterter operator[] Reply with quote

Tibor Pausz wrote:

Quote:
m[0][0][0][0][0][0][0] = 1;

Allokier mal für so ein Konstrukt den Speicher! Mit einem Operator so
wie von mir vorgeschlagen mußt Du bloß einmal den gesamten Block
allokieren.

Das geht trotzdem.

Voraussetzung ist, daß die erforderlichen Hilfsklassen Referenzen auf
den ursprünglichen Datentyp repräsentieren (also faktisch Views sind).
Die nötigen Informationen sind eigentlich nur ein value_type* auf das
erste Element und ein size_t increment, mit dem Abstand.
Zusätzlich müssen die Hilfsklassen eine Referenz auf die
Metainformationen (darunterliegende Dimensionen) halten - also noch ein
size_t*.

Es würde mich wundern, wenn man das nicht sogar mit /einer/
Template-Hilfsklasse hinbekommt, die die Dimension als
Template-Parameter hat. Für 0 muß man es dann natürlich spezialisieren.
Und fertig ist die erste Funktionalität einer Tensorklasse.

Hätte man den [,,,] Operator, könnte man die Sache nicht als Template
für beliebige Dimensionalitäten erschlagen.


Marcel

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tibor Pausz
Guest





PostPosted: Sun Oct 03, 2004 7:41 am    Post subject: Re: Erweiterter operator[] Reply with quote

Karl Heinz Buchegger <kbuchegg (AT) gascad (DOT) at> wrote:

Quote:
m[5,6]
ist identisch zu m[6]
Stichwort: Komma-Operator

Das dürfte eher unter die Fallstricke von C++ fallen und weniger um eine
gezielte Anwendung der Kommaoperators.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Oct 04, 2004 2:27 pm    Post subject: Re: Erweiterter operator[] Reply with quote

Karl Heinz Buchegger <kbuchegg (AT) gascad (DOT) at> wrote

Quote:
Tibor Pausz wrote:
[email]kanze (AT) gabi-soft (DOT) fr[/email]> wrote:

Sicher nicht. Besonders weil es schon die Möglichkeiten gibt,
entweder »m[5][6] = 50« oder »m(5,6) = 50« zu benutzen.

Das erstere geht nicht, da man den Operator[] nicht so überladen
kann ohne nicht eine Hilfklasse zu benutzen.

Also gehts doch Smile
Zugegeben, man muss ein bischen Aufwand treiben. Der Benutzer der
Klasse merkt aber nichts davon.

Ein sehr bisschen Aufwand, weil im einfachsten Fall heißt die
»Hilfklasse« double*, oder so was.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.