Felix's Blog

C++ boost Application

Mit boost application lassen sich schnell und einfach Dienste und Anwendungen entwickeln (Boost.Application)

Obwohl die Boost.Application Bibliothek (Github-Link) noch keine offizielle Boost Bibliothek ist, erfüllt sie dennoch schon phantastisch ihren Job. Mit ihr kannst du sehr einfach Konsolen- und Service-Anwendungen entwickeln. Man erstellt nur die Handler für Starten, Stoppen oder Schließen der Anwendung. Das Registrieren und betriebssystemspezifische Optionen übernimmt komplett die Boost.Application Bibliothek.

Natürlich ist die Bibliothek auch offen für neue Anwendungstypen. Renate Tegon Forti – der Schöpfer der Bibliothek – hat beispielsweise auf codeproject.com ein Beispiel erstellt, wie man ein einfaches Apache Modul mit Boost.Application entwickelt.

Nun aber zu einem Beispiel. Die einfachste Form einer Boost.Application Anwendung ist natürlich eine „Hallo Welt“-Anwendung ;). Die Logik der Anwendung verschiebt sich bei Verwendung der Bibliothek in eine separate Klasse.

Jetzt folgt die Klasse, die die Logik zur Verfügung stellt. Der Vollständigkeit halber habe ich die anderen Handler, die zur Verfügung stehen, in den Kommentaren ergänzt.

Mit dem Template-Parameter in ba::launch  können wir festlegen, ob die Anwendung als Service oder als normale Konsole ( ba::common ) gestartet wird.

Im app_context können wir Daten ablegen. Wenn wir die Argumente brauchen (argc, argv), die beim Start der Anwendung mitgegeben wurden, können wir diese sogar durch einen vorhandenen Typen in unseren Context einfügen. Später können wir das dann zum Beispiel mit den Boost.Program_Options wieder auslesen und auswerten. Um die Argumente zu speichern fügst du  app_context.insert<ba::args>( boost::make_shared<ba::args>(argc, argv)); in deine main-Funktion ein. Achte darauf, ob du boost::make_shared oder std::make_shared verwendest, wenn du Compiler-Fehler vermieden willst ( BOOST_APPLICATION_FEATURE_NS_SELECT_<<BOOST/STD>> ). Auslesen kannst du die Werte mit  context_.find<application::args>()

Server

Willst du einen Server oder einen anderen Dienst entwickeln, empfiehlt es sich, die Handler in den Kommentaren zu implementieren. Den Launch-Template Parameter musst du außerdem auf ba::server  ändern. Das Registrieren der Callback-Handler übernimmt die Bibliothek.

Das waren die Basics der Bibliothek. Für was willst du Boost.Application verwenden? Oder nutzt du’s bereits?



Published in: boost application, C++, OOP

Write a comment

 

Kommentar