2009-06-26 7 views
1

Wikipedia scheint zu sagen, dass C++ 0x anonyme Funktionen unterstützt. Boost scheint das auch zu unterstützen. Wie auch immer, ich benutze .NET, also wäre es großartig, wenn ich dabei bleiben könnte.Ist es möglich, anonyme Funktionen in C++ .NET zu verwenden?

Grundsätzlich möchte ich nur einen schnellen Code für Objekte schreiben. Ich habe einen Roboter, der etwa 85 - 90 Zustände haben kann. Die meisten Zustände sind nur "ganzzahlige Werte, die an den Roboter-Mikrocontroller weitergegeben werden". Also sage ich dem Roboter, dass er zum Beispiel zum Zustand 35 gehen soll.

Allerdings erfordern einige Zustände zusätzliche Manipulationen wie Benutzereingaben, also möchte ich es einfach halten und nur ein paar Zeilen Code für die Unterschiede schreiben. Ich habe überlegt, abgeleitete Klassen zu verwenden, aber es beinhaltet eine Menge Code, nur um ein paar Zeilen zu ändern.

Antwort

-1

Anonyme Funktionen, alternativ Lambda Expressions oder Delegates, sind eine Sprachfunktion von C# und nicht Teil des .NET-Frameworks. Ich glaube nicht, dass Microsoft an-Managed-C++ anonyme Funktionen hinzugefügt hat, und ich habe einige comments gefunden, die mir zuzustimmen scheinen.

Kein Grund zur Sorge. Wie Sie bereits erwähnt haben, ist Boost.Lambda eine nützliche Bibliothek, die Sie verwenden können. Was ist nett ist, dass es als Vorlagen vollständig in den Headern implementiert wird. Sie müssen also nur die Header einfügen. Jeder standardkonforme C++ - Compiler sollte dies unterstützen. Ich verstehe Ihren Wunsch, bei dem zu bleiben, was Sie bereits haben, aber der Aufwand für das Herunterladen und Verwenden dieser Header sollte wirklich minimal sein.

Wenn Sie wirklich nicht Boost verwenden möchten, dann können Sie versuchen, C# zu verwenden, aber ich empfehle, dass Sie nur die Boost Lambda-Bibliothek versuchen. Es ist wahrscheinlich einfacher als du denkst.

+0

Die neue Version des C++ - Standards hat auch Lambda-Ausdrücke, obwohl sie ein wenig seltsam sind. –

+0

Gut zu wissen, dass C++ jetzt Lambda-Ausdrücke bekommt. Aber als ich diese Frage vor 3 Monaten beantwortete, war das nicht klar ... zumindest nicht für mich. –

0

Wenn mit C++. NET Sie C++/CLI meinen, dann ja. Wenn MS C++ 0x-Lambda-Ausdrücke in ihrem C++ - Compiler unterstützt, wird diese Unterstützung auf C++/CLI ausgedehnt. Wenn Sie Lambda Ausdrücke jetzt wollen, dann sind Sie mit Boost.Lambda stecken.

0

C++ 0x Lambda-Funktionen sind in C++/CLI mit der Veröffentlichung von VC2010 verfügbar. Dies sind jedoch native C++ - Objekte und können nicht als C++/CLI-Delegaten verwendet werden. Sie müssen auch gcroot<> verwenden, um .NET-Handles zu übergeben.