Was ist hier falsch?
-
Original erstellt von MaSTaH:
Bei CSonstwas denke ich nicht automatisch an die MFC...machen wir mal eine umfrage wer bei
CList
CString
CWinApp
CApplication
CObjectich wette die meisten denken an MFC.
Der Sinn ist doch, dass das C sagt: Hallo, ich komme aus dem namespace der MFC.
Wenn du List schreibst, dann denkt niemand an die MFCdas ist der unterschied.
Ich will jetzt nichtmal über die Problematik von Prefixen reden, sondern nur darüber, dass C der namespace der MFC ist.
TObject ist ja auch eine Klasse von Borland - das weiß man, weil T der namespace von Borland ist.
std::Object wäre eine Klasse der C++ Standardlibrary, dazu muss man keine doku lesen um das zu wissen.das ist der Sinn der namespaces. dass was zusammengehört steht im gleichen namespace.
Würdest du:
namespace mastah
{
namespace std
{
class list {};
}
}schreiben?
so dass dann im code irgendwo einmal std::list auftaucht?
wer denkt denn dann daran dass es in wirklichkeit mastah::std::list ist?
also ich sicherlich nicht.Und jetzt stell dir mal vor, jemand will die Klasse CList in einer MFC anwendung verwenden... WIE soll das funktionieren?? man wird sich 100.000 mal vertun.
selbiges bei einem C++ programm mit mastah::std::list.
irgendwo taucht ein using namespace mastah auf und schupss die wups kennt sich keiner mehr aus ob std::list jetzt mastah::std::list oder ::std::list ist...Wir haben heute namespaces - da brauchen wir sie nichtmehr zu simulieren...
-
Original erstellt von Shade Of Mine:
**machen wir mal eine umfrage wer beiCList
CString
CWinApp
CApplication
CObjectich wette die meisten denken an MFC.
**Shade, mein Junge. Da hast du ganz richtig geraten. Auch ich dachte sofort an MFC. Willste nen Keks?
-
Also ich würde mal behaupten, dass es klare Konventionen gibt was namespaces angeht. So hat ein Namensraum nichts mit dem Namen einer Klasse zu tun, denn sonst wär es kein Namensraum und darüberhinaus wäre dann die Verwendung von Namensräumen in ihrem Sinn schon etwas eingeschränkter.
_Ich_ arbeite _nicht_ mit der MFC und habe deswegen auch das 'C' nicht damit assoziiert. Das 'C' steht für class und nicht für mfC (was ohnehin nicht sonderlich logisch ist). Und ich werde ganz bestimmt _nicht_ jegliche Bibliothek durchforsten um zu sehen welche Buchstaben auf irgendwas hinweisen.
Wenn jemand Bibliotheken, Programme oder sonstwas von mir nutzt, wird er sich schon die Mühe machen müssen, die Dokumentation wenigstens mal kurz anzuschauen. Und darüber wird dann recht schnell ersichtlich sein, dass es sich hier nicht um die MFC handelt.Und ausserdem zeigt mein Codebeispiel am Anfang des Beitrags klar eine Neudeklaration plus -definition einer Klasse. Also wie um ales in der Welt kommt man dann darauf, dass es sich um eine Klasse der MFC handelt? Noch zumal ich geschrieben habe "ich hab folgendes Template geschrieben"???
-
jo schöne scheisse, da haben wir hja glück das es nicht mehr classlibarys mit einbuchstabigen "namespaces" gibt...
-
C MFC
T Borland
Q QTanything else?
-
/me verleiht den "c-plusplus.net-Award für außergewöhnlich kreative bzw. spaßige Trolls" an <Die alte Dame>.
Ich halte Klassen mit C-Präfix ehrlich gesagt mittlerweile auch für eine Unart, obwohl ich nie intensiver mit den MFC programmiert habe.
Bashar: KClassname für KDE.
[ Dieser Beitrag wurde am 19.05.2003 um 17:09 Uhr von nman editiert. ]
-
Original erstellt von Bashar:
**C MFC
T Borland
Q QTanything else?**
jo
das "C" bei den MFC Klassen kommt von "class"
das "T" bei Borland C++ Builder Klassen kommt davon, dass der C++ Builder seine Wurzeln in Borland Delphi hat und dort die ganzen Klassen als Typen ("type TList" oder "type TButton") angelegt wurden. Dies wurde dann beim C++ Builder grade beibehalten, da dieser die selbe VCL verwendet wie Delphi.
Lediglich bei Qt und KDE stehen die Klassen "Q..." und "K..." für die Programmier API (z.B. QListView, QPushButton oder KHTML).
-
Original erstellt von Descartes:
**
das "T" bei Borland C++ Builder Klassen kommt davon, dass der C++ Builder seine Wurzeln in Borland Delphi hat**Die T-Geschichte gabs aber schon lange vor Delphi in Turbo Vision.
-
ehrlich gesagt, ich benutze sowohl einen eigenen namespace, als auch einen präfixbuchstaben, damit ich z.b. schreiben kann: FList List und nicht List list.
aber von den genannten präfixen (C, T, Q, K) halte ich abstand, weil nahezu jeder programmierer, der schon etwas länger dabei ist, diese präfixe schon mindestens einmal verwendet, und mindestens schon 100erte mal gelesen hat.
am sichersten ist allerdings, wenn man einfach nur klassennamen groß schreibt und instanzen klein! ich frage mich eh, woher das kommt, dass der BCB und MSVCC ihre variablen standardmäßig groß schreiben...
-
Original erstellt von Bashar:
Die T-Geschichte gabs aber schon lange vor Delphi in Turbo Vision.Schon klar. Delphi ist ja auch "nur" Object Pascal und hat das "type T..." von Borland Pascal bzw. von deren TurboVision geerbt.
BTW: Bei Borland Pascal haben viele Tutoren und Profs den Aspiranten beigebracht eigene Datentype die mit "type" definiert wurden mit "T..." und Pointer "P..." zu benennen. Beim Umstieg auf C bzw. C++ wurde von den selben Leuten dann empfohlen, eigene Klassen "C..." zu nennen. Heute liese sich darüber streiten, in wie fern dies sinnvoll ist. Damals wurde es halt so gemacht. Inzwischen wird von C++ Profs empfohlen, alles in einen eigenen Namespace zu packen um eine Namespace Pollution zu vermeiden.
-
Inzwischen wird von C++ Profs empfohlen, alles in einen eigenen Namespace zu packen um eine Namespace Pollution zu vermeiden.
Huh?
Na da fehlt doch wohl mindestens ein Wort
-
Es war ja nur ein gut gemeinter rat.
Es gab hier schon mal eine lange Diskusion im FOrum da sich jemand einen eigenen CString gebaut hat und der rest an den des VC bzw. der MFC gedacht hat.
Hat rund 20 Posts gekostet bis das geklärt war.Anwender der CList können in die irre geführt werden. Man wird nie vermeiden können das man Namensgleichheit mit anderen hat, kann aber weit verbreitete Namensgebungen von den man weiß meiden.
-
Original erstellt von Shade Of Mine:
**Würdest du:
namespace mastah
{
namespace std
{
class list {};
}
}
**Nö, würd ich nicht. Ich hab ja auch nicht davon geredet wie sinnvoll/-los so etwas ist (s.o.). Ich meinte nur man sollte es jedem selbst überlassen, eben weil ich befürchtet habe dass wieder so eine 0-8-15-Diskussion über Prefixe und sinnvolle Namensgebung entsteht. Dass es verwirrt ist klar, aber auch außerhalb der MFC verwenden viele Leute das C als Prefix für class. Sei es aus Unwissenheit woher es stammt oder aus purer Gewöhnung an das Arbeiten mit den MFC (wie bei mir
).