Meinung: C++/CLI
-
Hallo zusammen
dieser Post soll mir im Idealfall zu zwei Anhaltspunkten Klarheit verschaffen. Der erste davon ist eure Meinung zu C++/CLI, und dazu fange ich am Besten erstmal mit dem Grund, warum ich ein leckeres 5 Sterne Cordon Bleu mit Jugendherberge-Bohnensuppe füllen will, an ^^:
Also, jedesmal wenn mir etwas, was man "template-isieren" kann, einfällt, schreibe ich es in meine für private Zwecke zusammengebastelte Library. Darunter fällt bisher jedoch nichts, was man als GUI bezeichnen könnte.
Dies wollte ich dann nun mal ändern.Ich habe allerdings nicht die Zeit mit Windows GDI oder GDI+ hübsche Elemente zu basteln. MFC ist auch nicht mein Geschmack (ich bin bereit das Cordon Bleu mit Bohnensuppe zu füllen, nicht aber mit gehacktem Hirn), ebensowenig wie wxWidgets oder QT, und DirectDraw zu nehmen wäre wohl das Selbe wie ein Blatt Papier mit einem Panzer zu falten ^^
Nach einiger Zeit stolperte ich dann über WPF, und bin beeindruckt. Prompt las ich mir dann mal ein EBook über C# durch, und musste feststellen, dass - da ich einigermaßen erfahren in C++ und ASM bin - meine native-code Logik mächtig von dem .NET-Konzept verprügelt wurde (Sachen wie z.B. 3.ToString() ... find ich einfach Grauenhaft ^^) ... ich werds jedoch überleben ^^, nur daher kommt es für mich nicht in Frage einfach zu C# zu wechseln und ausschließlich .NET zu begegnen.
Also ist der für mich einzig bekannte Mittelweg: InterOp
Meine erste Frage ist daher nun letztendlich, was eure Erfahrungen mit C++/CLI so aussprechen. Besonders in größeren Projekten, welche Pro und Contras euch untergekommen sind. Auch Zukunftbedingt.
Google liefert mir nur Microsofts "Meinungen", auf welche ich gerne verzichten kann.Um potenziell Zeit-verschwendende Antworten vorzubeugen:
- Ja, ich habe diesen Thread gelesen.
- Ja, ich verstehe warum .NET und/oder CLI eine komplett andere Welt als (ISO)C/C++ ist.Nun gut, zum Schluss dann noch meine etwas offtopic zweite Frage:
Wie oben beschrieben, kommt jede Menge "Kram" in die Library. Von daher habe ich eine Globale Header-Datei, in welche ich per Präprozessor-Definitionen ganze Module vom Compilieren ausschließen kann, sollte ich sie für ein Projekt nicht brauchen.
Wenn ich somit also für ein Projekt kein CLI brauche (und somit auch die Referenzen), wäre es für mich Ekelhaft jedesmal in die Projekteigenschaften/Referenzen zu gehen.Meine Frage ist also, ist es irgendwie möglich dem Compiler (Microsoft Visual Studio 08/10) per #pragma (oder wie auch immer ^^ Hauptsache im Quellcode) dem Compiler die /clr Flag hinzuzufügen und auch die Referenzen für z.B. WPF, sodass ich sie in Präprozessor Directives verstecken kann, sodass sie nur wenn auch gebraucht aktiv werden ?
In der MSDN hab ich nichts gefunden, könnte es allerdings auch übersehen haben ^^ ich mein, wer könnte z.B. vorausahnen, dass das Wort "comment" mit "linken" in Bezug gezogen wird ^^Ich freue mich auf eure Antworten
MfG Slypy
-
Was war denn die erste Frage?
Ob C++/CLI nur für InterOp gedacht ist? => Ja. Und verwenden kann man es dafür auch, und aus meiner Sicht auch ohne große Probleme, wenn man weiss, was man tut.Und nein, Du kannst dem Compiler nicht per Pragma ein "managed" hinzufügen. Du kannst es nur dem Projekt als ganzen hinzufügen und es für bestimmte Codebereiche ausschalten (#pragma managed...). Das würde ich aber so nicht machen, da es dann immer eine Abhängigkeit zu .NET gibt, auch wenn Du es in allen Code-Zeilen deaktiviert hast.
-
Slypy schrieb:
Meine erste Frage ist daher nun letztendlich, was eure Erfahrungen mit C++/CLI so aussprechen.
Ohne C++/CLI wären Architekturen wie diese nur halb so schön:
http://www.codeproject.com/KB/scrapbook/AFDeterministicPrimes.aspx
Aber im Ernst, früher unter VS 2002/2003 bin ich den Weg über exportierte C-Funktionen gegangen, die dann in C# verwendet wurden. Da erlaubt C++/CLI wesentlich schönere objektorientierte Ansätze. Man kann in C++/CLI Wrappern sehr schön mit Brigde- oder Adapter-Patterns arbeiten, weil auf der anderen Seite oft eine andere Objektstruktur Sinn macht.
Slypy schrieb:
Also ist der für mich einzig bekannte Mittelweg: InterOp
Interop ist eine Brücke, kein Weg.
Slypy schrieb:
...
nur daher kommt es für mich nicht in Frage einfach zu C# zu wechseln und ausschließlich .NET zu begegnen.
...
- Ja, ich verstehe warum .NET und/oder CLI eine komplett andere Welt als (ISO)C/C++ ist.In anderen Welten werden eben andere Sprachen gesprochen. Da ist es mir wichtig in C# (oder neuerdings sehr gerne auch in F#) zu arbeiten, das ist deutlich produktiver.