Als ich entdeckte boost::lexical_cast
dachte ich mir: "Warum wusste ich nicht früher davon?" - Ich hasste es, Code schreiben zu müssen
stringstream ss;
ss << anIntVal;
mystring = ss.str();
Jetzt schreibe ich
mystring = boost::lexical_cast<string>(anIntVal);
Gestern bin ich beim Stackoverflow auf Boost Split gestoßen (ein weiteres Juwel, das mir das Schreiben von Code erspart).
string stringtobesplit = "AA/BB-CC")
vector<string> tokens;
boost::split(tokens, stringtobesplit, boost::is_any_of("/-"));
// tokens now holds 3 items: AA BB CC
Ich werde anfangen, die Boost-Dokumentation nach anderen Funktionen zu durchsuchen, die ich regelmäßig verwenden kann, aber ich denke, dass es sehr leicht sein wird, Dinge zu übersehen.
Welche Boost-Funktionen verwenden Sie am meisten / würden es hassen, nicht zu haben?
Antworten:
Der wahrscheinlich am häufigsten verwendete Teil von Boost ist für mich boost :: shared_ptr .
quelle
std::shared_ptr
und nicht mehr relevantstd::unique_ptr
.BOOST_FOREACH macht das Leben wieder lohnenswert.
(Warum hat das niemand erwähnt? Die Frage wurde vor 8 Monaten gestellt!)
quelle
Meine Favoriten sind in keiner bestimmten Reihenfolge:
Boost war eine große Hilfe, als ich meine erste plattformübergreifende App schrieb - ohne sie hätte ich wirklich Probleme gehabt.
quelle
Mir gefällt, wie Sie Ihren eigenen Destruktor für liefern können
shared_ptr
.Dies bedeutet beispielsweise, dass Sie es verwenden können
FILE*
, um die Datei für Sie zu schließen.z.B
quelle
NULL
ist nutzlos, da sie den lokalen Funktionsparameter zuweist. :)Niemand hat Multi-Index-Container erwähnt daher werde ich mich spät melden. Es kommt nicht so oft vor, dass Sie sie benötigen, aber ohne Boost ist es ein echtes Problem, eine gleichwertige Datenstruktur zu erstellen und weniger effizient zu sein. Ich habe sie in letzter Zeit häufig verwendet, um Container zu erstellen, die auf 2 Schlüsseln nachgeschlagen haben.
quelle
Ich bin überrascht, dass niemand erwähnt hat
boost::optional
. Ich benutze es öfter als irgendeinen Teil von Boost außershared_ptr
undscoped_ptr
.quelle
std::experimental::optional
und bald (C ++ 17?) Alsstd::optional
.Niemand erwähnt boost :: tuple? Zum Schämen!
quelle
std::tuple
.BOOST_STATIC_ASSERT
Update (Oktober 2011): C ++ 11 (C ++ 0x) hat
static_assert
http://www2.research.att.com/~bs/C++0xFAQ.html#static_assertquelle
Eine meiner am häufigsten verwendeten ist nicht Boost, sondern die Adobe Source Libraries (ASL), die auf Boost aufbauen - insbesondere die Erweiterungen der Standardalgorithmen, die einen Boost :: -Bereich anstelle separater Start- / End-Iteratoren akzeptieren. Dann, anstatt anzurufen, sagen wir:
Ich kann einfach sagen
(Ich hoffe, dass diese Teile von ASL irgendwann zu Boost migrieren.)
quelle
Ich benutze viel:
Andere wie Tuple, Static Assert und Integer sind sehr nützlich, wenn Sie eine Bibliothek schreiben, die auf einer Vielzahl von Plattformen verwendet werden soll.
Dinge wie Graphs und Lambda sind spezifischer.
quelle
boost::shared_ptr
ist eine Voraussetzung für die moderne C ++ - Programmierung IMHO. Deshalb haben sie es mit TR1 zum Standard hinzugefügt.boost::program_options
,boost::bind
Undboost::signal
sind wirklich nett , wenn Sie wissen , was sie sind und wie sie zu benutzen. Die letzten beiden neigen jedoch dazu, Neuankömmlinge zu erschrecken.quelle
Wir fanden boost :: spirit ziemlich nützlich für eine Geschäftslösung zum Parsen von ECMAScript. Komplex, aber sehr schön!
quelle
Ich bin überrascht, noch nicht zwischen den Antworten Boost.Thread zu sehen .
quelle
std::thread
.Ich benutze shared_ptr seit Jahren. Es ist einfach so nützlich, es gibt keinen Grund, warum ein Projekt ohne es sein sollte.
Darüber hinaus verwende ich Bind / Function / Lambda für generische Rückrufmechanismen - besonders nützlich beim Testen - sowie Format für meinen allgemeinen Sprintf-Ersatz.
Schließlich war es erst neulich, als ich Variant in Wut verwendete, um ein Problem zu lösen (ein Parser, der mit einem kleinen, festen Satz nicht verwandter Token-Typen antworten konnte). Die Lösung war sehr elegant und ich bin sehr zufrieden damit.
Jahre sind vergangen und die Zeiten haben sich geändert, also Zeit für ein Update. SharedPtr und Function sind jetzt Teil des Standards, und Bind und Lambda sind durch die tatsächliche Lambda-Funktionalität auf Sprachebene überholt.
Ich verwende immer noch Variant (das ebenfalls standardisiert wurde, aber ich bin noch nicht da). Das Format wird größtenteils durch fmtlib (das ebenfalls standardisiert wurde) ersetzt.
Der große Teil von Boost, den ich benutze, ist Boost.Asio. Welches ist im Begriff, standardisiert zu werden.
quelle
Verwenden von Tupeln zum Iterieren einer Karte wie folgt:
Mit Boost Assign kann ich eine Karte wie folgt initialisieren:
Und mit Bereichsadaptern und dem Pipe-Operator ("|") kann ich die Werte einer Karte rückwärts durchlaufen (als Beispiel):
quelle
Sie sollten boost :: program_options überprüfen. Dies erleichtert das Parsen von Befehlszeilen erheblich.
quelle
Ich benutze Boost Pointer Container vor einem STL Container von
shared_ptr
s.quelle
Ich benutze Boost :: Numeric :: Ublas :: Matrix ziemlich oft .
quelle
Ich liebe boost :: random und boost :: asio und boost :: filesystem, aber boost :: bind, boost :: Circular_buffer und boost :: thread sind sehr praktisch, intelligente Zeiger sind in Ordnung, aber ich bevorzuge RAII als Speicherverwaltung
quelle
Okay, hier ist eine neue, die ich gefunden habe:
Anstatt stricmp zu verwenden, kann ich die Gleichheitsfunktion von boost verwenden und das Prädikat is_iequal übergeben,
z. B.:
Anstelle von
ich kann nutzen
gegeben:
quelle
Hier sind meine zwei Cent:
quelle
ich benutze
boost::icl
ziemlich viel für die Textnachbearbeitung. Das hat mir ziemlich viel Zeit gespart, da ich sonst die Textaufteilung selbst implementieren müsste ...BOOST_FOREACH
ist überall in meinem Code :)boost::function
undboost::bind
sind ein absolutes Muss. Obwohl sie jetztstd::function
und sindstd::bind
. Diese helfen wirklich dabei, die Menge an unnötigem Code zu reduzieren und sind im Allgemeinen gut für meine Designs (oder meine Wahnvorstellungen).Ich habe vor kurzem angefangen zu verwenden
boost::interprocess::message_queue
und dies ist auch ein großartiges Werkzeug.Ich würde viel mehr verwenden, aber Qt hat native Methoden, um viele Dinge zu tun, die Boost tut. Wenn ich jemals reines C ++ programmieren müsste, würde ich wahrscheinlich ein
boost::junkie
:) werdenquelle
Was ich am häufigsten benutze, ist jetzt im TR1 verfügbar:
Jetzt benutze ich auch Poolklassen und einige andere spezifischere Dinge.
Sie verstehen jetzt, dass Boost für die meisten Programmierer nützlich sein soll. Deshalb ist es der Prüfstand für die zukünftige Standardbibliothek.
quelle
Wenn wir über boost :: lexical_cast sprechen, warum ist so etwas wie 'format' kein statisches Mitglied in der std :: string-Bibliothek?
Fast alle GUI-Bibliotheken haben so etwas wie CString :: Format ("% i") oder QString :: Number ("% i"), die eine initialisierte Zeichenfolge zurückgeben.
quelle
std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();
Ich denke, die Frage sollte umgekehrt werden. Welchen Teil Ihres Boosts möchten Sie nicht nutzen?
Nach meiner Erfahrung ist so ziemlich alles in jedem Problembereich interessant und nützlich.
Sie sollten sich in der Boost-Dokumentation umsehen, um die Bereiche zu finden, die Ihre Interessen abdecken.
Eine Ausnahme mag sein,
boost::numeric::ublas
dass es seinen Job macht, aber Eigen macht es bemerkenswert besser.quelle