|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 27.10.2005, 15:19 Titel: Smart-Pointer Frage |
|
|
Wenn ich eine Klasse habe, welche intern einen Pufferbereich besitzt, kann ich ja den Pointerpoerator passend überlagern, um darauf (lesend) zuzugreifen.
Beispiel: CPP: | class Foo
{
private:
char* puffer; // Puffer für Readonlyzugriff
public:
const char*& operator*()
{
// Tut noch irgendwas vernünftiges
return puffer;
}
}; |
Nun würde ich aber auch ganz gerne Schreibzugriff gewähren, und zwar kontrolliert - sprich wenn dich die Puffergröße überschreiben würde, sollte entweder abgebrochen werden (throw) oder der Puffer vergrößert werden - je nach Situhation.
Kann ich eine solche Funktion ermöglichen?
Mein erster Denkansatz ist, die Klasse wie einen Standard-String zu implementieren und den Operator+ zu überladen.
Das würde vermutlich aber nicht mein Ursprungsproblem lösen, welches am besten so formuliert werden könnte: CPP: | Foo f;
(*f)[1234]='c'; // 1234 ist größer als der Puffer |
(was im Moment eh nicht geht, weil der Pointeroperator ja (noch)zurückgibt)
Daher:
Wie müsste man ein solches Problem überhaupt angehen?
Ich muss garantiert noch eine ganze Menge mehr an Operatoren überladen - welche alle?
Eventuell eine eigenständige Pufferklasse nutzen - wäre std::string geeignet für Binärpufferdaten? _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 27.10.2005, 15:30 Titel: |
|
|
Du könntest den Array Operator überladen und testen ob der angegebene Index grösser als die Puffer Grösse ist. Am besten gibts du etwas konkretere Beispiele _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 27.10.2005, 16:03 Titel: |
|
|
Fallen hat Folgendes geschrieben: | Du könntest den Array Operator überladen und testen ob der angegebene Index grösser als die Puffer Grösse ist. Am besten gibts du etwas konkretere Beispiele | Kann ich so nicht, weil ich den Arrayoperator von char* überladen müsste - so weit war ich nämlich schon...
std::string als Puffer zu benutzen (oder eine eigene Implementation eines Pufferspeichers) würde die Sache zwar regeln, das Problem aber nur von der Klasse in den Puffer verlagern. Da könnte ich prinzipiell die Klasse selbst zum Puffer erweitern und z.B. mit Hilfe spezieller Konstruktoren, dem Zuweisungs-Operator und dem Copyctor das gleiche erreichen.
Der Aufwand ist (meiner Meinung nach) definitiv gerechtfertigt - die fertige Klasse soll so einfach und intuitiv bedient werden können, wie nur möglich _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|