managed C++ and const members



  • Hallo,

    hoffe das es hier am besten hinpasst auch wenn es um manged C++ geht: folgendes Problem: wie setze ich const correctnes in managed C++ um?

    __gc class DbUser
    		{
    			public:
    				DbUser( String __gc* strUser, String __gc* strUserPwd ) : m_strUserName(strUser), m_strUserPwd(strUserPwd){}
    				const String* GetUserName(){ return m_strUserName; }
    				const String* GetPwd(){ return m_strUserPwd; }
    			private:
    				String* m_strUserName;
    				String* m_strUserPwd;
    		};
    

    folgendes finde ich jetzt sehr unschön:

    DbUser* myDbUser = new DbUser( "Test", "Blabla" );
    String* strNew = new String( myDbUser->GetUserName() );//geht nicht
    String* strNewCasted = new String( const_cast<String*>(myDbUser)->GetUserName() );//geht
    

    Irgendwie schein sich dieses Problem durchzuziehen auch viele String - Funktionen scheinen mit const String* (Ptr?? sind das überhaupt richtige Ptr? ) nichts anfangen zu können.

    Danke für Eure Hilfe



  • So, soweit ich das richtig verstanden habe:

    const correctnes giebt es auch in C# so nicht. Vermutlich hat das .Net-Framework dieses "Feature" also geerbt, da es ja in allen .Net Sprache einstzbar sein soll, also vermutlich bei den Mitteln der sprachlichen Zugriffe sowas wie den "kleinsten gemeinsamen Nenner" zuläßt.
    Fazit : richtig Spaß macht das ganze nur mit C#, zumal manged C++ IMO kein ForeEach und eine häßliche verhunzte C++ Syntax hat...



  • ManagedC++ war nur ein Schnellschuß von MS, um überhaupt den C++ Codern etwas an die Hand zu geben. ManagedC++ (die Syntax) ist sogar in VC++ 2005 abgeschaltet, wenn man CLI aktiviert, und kann nur explizit mit nem Compilerswitch genutzt werden. Standardmäßig und vorallem standardisiert (ECMA) ist ja C++/CLI! Und das hat auch eine viel schönere Syntax, die eher dem ISO C++ entspricht. Z.B. legt man in C++/CLI Heapobjekte mit gcnew an. Diese ganzen Doppelunterstriche sind alle weg.

    Wenn du ernsthaft verwaltetes C++ coden willst, solltest du VC++ 2005 benutzen. Zumal es da auch die STL.NET gibt, die ja im alten ManagedC++ ja auch nicht wirklich funktioniert hat.



  • mhh, dann wird die Wahl wohl eher auf C# fallen (ist ein neues Projekt). Managed C++ war eher, um den Einstieg in Forms und das .Net Framework zu finden (hab gerade ein VS, das nur C++ und kein C# kann).
    Gut zu wissen, das es im 2005er besser ist, wird aber wohl für das Projekt sicher nicht in Frage kommen.

    Aber in Bezug auf const correctness liege ich da wohl richtig, oder?



  • nimm C++/CLI.


Anmelden zum Antworten